6

我正在尝试在标签内获取文本值li,但它有另一个我不想要的标签

例子:

<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。如何删除 a 标签?必须有一个我不熟悉的简单解决方案,

谢谢!

4

4 回答 4

6
$("ul li").contents(':not(.close)').text()

children() 不返回文本节点;要获取所有子节点,包括文本和评论节点,请使用 .contents() http://api.jquery.com/children/

于 2012-06-08T05:43:56.930 回答
2

自定义伪类过滤器

为抓取文本节点编写自己的表达式:

$.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/

于 2012-06-08T05:53:47.813 回答
1

这很丑陋,但它有效。它克隆节点,然后删除所有子节点,最后打印剩下的文本:

$('ul li').clone()
  .children()
    .remove()
    .end()
  .text()

设法从这里喜欢的信息中提取一个更好的版本:如何使用 jQuery 选择文本节点?

$('ul li').contents().filter(function() {
    return this.nodeType == 3;
}).text()
于 2012-06-08T05:34:03.790 回答
0
$('ul li')
   .contents()   // target to contents of li
   .filter(function() {    
      return this.nodeType == 3;  // filtering over textnode
}).text();  // get the text value

演示

于 2012-06-08T05:44:41.713 回答