我有这样的HTML:
<div id="divTestArea1">
<b>Bold text</b>
<i>Italic text</i>
<div id="divTestArea2">
<b>Bold text 2</b>
<i>Italic text 2</i>
<div>
<b>Bold text 3</b>
</div>
</div>
我想删除所有非粗体的元素。我试过这段代码:
$('*:not(b)').remove();
以及其他一些变体,但它们都会出错或删除所有内容。顺便说一下,jquery选择器和jsoup选择器是否100%兼容?我也想在jsoup中使用这个答案。
答案 0 :(得分:5)
您当前的代码会删除文档<body>
以及包含<div>
标记的所有<b>
。如果您只想保存粗体文本,那么Shih-En Chou的解决方案效果很好。如果您想保存<div>
标签所在的<b>
结构,您可以这样做:
$("body *:not(div, b)").remove();
答案 1 :(得分:3)
我的解决方案:
我克隆<b>
并将其保存到内存中。
- &gt;全部删除
- &GT;将<b>
插入<body>
这是我的代码: http://jsfiddle.net/sechou/43ENq/
$(function(){
var tmpB = $("b").clone();
$('body').remove();
$("body").append(tmpB);
});
答案 2 :(得分:2)
移动#divTestArea2
中的所有元素,因为它是div
,也会被移除到#divTestArea1
,然后过滤掉任何不是<b>
的内容并删除它:
$("#divTestArea1").append($("*", "#divTestArea2")).find('*').filter(function() {
return this.tagName !== 'B';
}).remove();
以上内容保持#divTestArea1
元素不变,删除所有但<b>
元素,如:
$('body').append($('b')).find('*').not('b').remove();
答案 3 :(得分:2)
我更喜欢.detach()
。
var $body = $("body");
var $b = $("b", $body).detach();
$(":not(b)", $body).remove();
$body.append($b);
这样您就不需要移动或克隆任何内容来克服删除包裹<b/>
元素的对象的问题。
答案 4 :(得分:1)
试试这个:
// Find all the <b> tags and unwrap them so they all become siblings and finally
// remove non <b> siblings
$('body').find('b').unwrap().siblings('*:not(b)').remove();