#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>