javascript / jquery — как проверить, имеет ли элемент текстовый атрибут или нет

#javascript #jquery

#javascript #jquery

Вопрос:

Есть ли какой-либо способ определить во время выполнения, возвращает ли элемент значение для element.text() или нет? Используя javascript или jquery?

Т.е. какой-то способ проверить, является ли элемент чистым текстом, или это элемент какого-то другого типа?

Зачем мне нужно решение вышеупомянутого—

Я пытаюсь проанализировать некоторые сложные формы с совершенно разными стилями кодирования (таким образом, например, текстовые значения для элементов переключателя могут быть заключены в теги label, или они могут быть заданы напрямую, или они могут быть заключены в теги span, и так далее …)

Итак, мне нужно проанализировать форму с идентификатором формы в качестве оболочки,

теперь, если текстовое значение для переключателя заключено в span, а текущим выбранным элементом является переключатель, то следующим элементом будет тег span (открытие), с которым я ничего не хочу делать и двигаться дальше. Следующим будет текст, и я хочу получить его с помощью this.text() .

Отсюда и весь вопрос…

Ответ №1:

Вы можете использовать nodeType для проверки, является ли элемент чистым текстом (в этом случае его значение будет равно 3)

 <div id="wrapper"><input type='radio' />some text here</div>

$('#wrapper').contents().each(function()
                   {
                        alert(this.nodeType);
                   });
  

Он выдаст предупреждение 1 (для ввода) и 3 (для текста). Для type=3 вы можете использовать text() для получения текстового значения

Примечание — Также будут учтены пробелы (как текстовые узлы).

Комментарии:

1. Я знаю, что это придирчиво, ну, на самом деле это совсем не с javascript, но убедитесь, что фигурные скобки не начинаются с новой строки при использовании javascript, иначе плохой синтаксис.

2. @Vikk — Я пытаюсь выполнить синтаксический анализ через «<тип ввода =»radio» name=»lunch» value=»pasta1″ /><span>Макароны</span>», но предложенный вами метод (получить nodeType) не способен выделить текст «Макароны» после игнорирования открывающего э лемента «<span>»…Является ли это ограничением сам ой команды text()? Я просто хочу пропустить div / span / label / другие подобные типы элементов, если указанный тип элемент а содержит текст…(Паста в моем примере)… Или я должен использовать другой подход для label / span / di v соответственно?? Спасибо…

3. Поскольку макароны заключены в теги span, это больше не текстовый узел. Теперь это тег span. Пожалуйста, обновите то, что вы пытаетесь сделать здесь — jsfiddle.net/SrKxP

Ответ №2:

 var attr = $(this).attr('name');

// For some browsers, `attr` is undefined; for others,
// `attr` is false.  Check for both.
if (typeof attr !== 'undefined' amp;amp; attr !== false) {
    // ...
}
  

Другой способ проверить:

 if( typeof( $(this).attr('name') ) != 'undefined' ) { // ... }
  

вы можете создать свой собственный метод расширения jQuery:

 $.fn.hasAttr = function(name) {  
   return this.attr(name) !== undefined;
};
$(document).ready(function() {
    if($('.edit').hasAttr('id')) {
        alert('true');
    } else {
        alert('false');
    }
});



 <div class="edit" id="div_1">Test field</div>
  

Ответ №3:

привет, вы можете проверить тип элемента следующим образом

    <form >
    <input type="text" id="a" value="abc"/>
    </form>
    <script>

       var type = document.forms[0].elements[0].type;
       alert(type);

    </script>