jquery получает значения внутри тега ul li, но не хочет определенного тега
Я пытаюсь получить текстовое значение внутри li
тег, но это уже другой тег, который я не хочу!--5-->
пример:
<ul>
<li><a class="close">x</a>text</li>
<li><a class="close">x</a>more text</li>
<li><a class="close">x</a>wohoooo more text</li>
</ul>
Я могу получить тег, как так
$("ul li").text();
но он также захватывает x из a
. Как удалить тег? Должно быть простое решение, с которым я не знаком,
спасибо!
4 ответов
$("ul li").contents(':not(.close)').text()
children () не возвращает текстовые узлы; чтобы получить все дочерние узлы, включая текстовые и комментирующие узлы, используйте.содержание() http://api.jquery.com/children/
Пользовательский Фильтр Псевдо-Класса
напишите свое собственное выражение для захвата textnodes:
$.extend( $.expr[":"], {
textnodes: function( e ) {
return e.nodeType === 3;
}
});
$("ul li").contents(":textnodes");
в результате чего в следующей коллекции:
["text","more text","wohoooo more text"]
Скрипка:http://jsfiddle.net/jonathansampson/T3MQc/
Пользовательский Метод
вы также можете продлить jQuery.fn
чтобы предоставить свой собственный метод:
$.extend( $.fn, {
textnodes: function() {
return $(this).contents().filter(function(){
return this.nodeType === 3;
});
}
});
$("ul li").textnodes();
это приводит к тому же самому выводу мы видим выше.
Это довольно уродливо, но это работает. Он клонирует узел, затем удаляет все дочерние элементы и, наконец, печатает оставшийся текст:
$('ul li').clone()
.children()
.remove()
.end()
.text()
удалось вытащить более приятную версию из информации здесь:Как выбрать текстовые узлы с помощью jQuery?
$('ul li').contents().filter(function() {
return this.nodeType == 3;
}).text()
$('ul li')
.contents() // target to contents of li
.filter(function() {
return this.nodeType == 3; // filtering over textnode
}).text(); // get the text value