JQuery:从字符串中删除元素

19

我有一个字符串:

var s = '<h1>heading</h1><p>para</p>';

我想从中删除h1元素。我尝试过:

$(s).remove('h1');

但是s仍包含h1元素。我还尝试过:

s = $(s).remove('h1');

$('h1', s).remove();

并且

$('h1', $(s)).remove();

有什么想法吗?

1个回答

36
更新:我看到你刚刚修改了问题。现在的解决方案应该是这样的:
var s = '<h1>heading</h1><p>para</p>';

var $s = $(s).not('h1');

$('body').append($s);​

试一下: http://jsfiddle.net/q9crX/19/

因为您现在在jQuery对象中有多个“顶级”元素,所以可以使用.not()(基本上是.filter()的相反)来删除h1

这与执行$(s).filter(':not(h1)');相同。


原始答案

$(s).find('h1').remove();

如果您想将结果附加到 body,可以这样做:

var s = '<div><h1>heading</h1><p>para</p></div>';

var $s = $(s).find('h1').remove().end();

$('body').append($s);​

尝试一下: http://jsfiddle.net/q9crX/

1
@alex - 这是因为你需要将创建的jQuery对象存储在一个变量中。当你用$(s)包装它并执行.find('h1').remove()时,你并没有修改原始字符串。 - user113716
@patrick 哦,是的,糟糕,我想那是我的一个大疏忽!无论如何,加一分 :) - alex
1
谢谢@alex。:o) 一开始我真的卡住了,不知道为什么它会添加我刚刚删除的<h1>,但后来想起需要使用.end()回到<div> - user113716
抱歉,我在问题中犯了一个错误(现已更新)。事实证明,该字符串并没有被包装在 div 中。 - Petah
如果您想要删除的元素位于另一个元素内部怎么办?比如说,我想从<div><table></table></div>中删除<table>元素,以便只剩下<div></div>。 - FrenkyB

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