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();

это приводит к тому же самому выводу мы видим выше.

Скрипка: http://jsfiddle.net/jonathansampson/T3MQc/1/


Это довольно уродливо, но это работает. Он клонирует узел, затем удаляет все дочерние элементы и, наконец, печатает оставшийся текст:

$('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

демо