如何使用jQuery删除元素内部的文本?

14

我有一个脚本,它创建了一个类似以下结构的项目列表:

<li>
    <div>Some stuff</div>
    <a href="http://www.mysite.com/">New Item</a> 
    (1 vote)
</li>
我想知道是否有一种方法可以使用jQuery或常规javascript删除除了<div><a>标签之外的所有内容,例如(1 vote)字符串。
提前感谢!

1
这里有你想要的一切:https://dev59.com/xnVC5IYBdhLWcg3wbgdS - benhowdle89
3个回答

28

这应该可以工作。

$("li").contents().filter(function(){ return this.nodeType != 1; }).remove();

或者通过明确指定文本节点

$("li").contents().filter(function(){ return this.nodeType == 3; }).remove();

请看这个fiddle


5
谢谢!我最终使用了 $('ul li').contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).remove(); - Javier Villanueva

1
$('li').html($(this).children())

您可以尝试这个,它应该可以工作。清洁简单。

有趣的想法,但HTML只接受字符串。你可以使用.empty().append(children),但在执行此操作之前,你必须先存储子元素。 - megawac

0
$('li').not('div,a').text('') 

尝试这个,未经测试

编辑

$('li').contents().filter(function(){ return !(this.tagName == 'DIV' 
                                            || this.tagName == 'A');}).remove();

不行,它不起作用:http://sandbox.phpcode.eu/g/-247fd6d2e7667cb8732e56d5043f96db.php - genesis
没运气 :( 不过它确实有意义 - Javier Villanueva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接