5

我有这样的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 中使用这个答案。

4

5 回答 5

5

您当前的代码删除了文档<body>以及<div>包含<b>标签的所有 s。如果您只想保存粗体文本,那么 Shih-En Chou 的解决方案效果很好。如果你想保存标签所在的<div>结构,<b>你可以这样做:

$("body *:not(div, b)")​​​​.remove();​

演示

于 2012-08-17T05:56:29.473 回答
3

我的解决方案:

我克隆<b> 并将其保存到内存中。-> 全部删除 -><b>插入<body>

这是我的代码:http: //jsfiddle.net/sechou/43ENq/

$(function(){
   var tmpB = $("b").clone();
   $('body').remove();
   $("body").append(tmpB);
});​
于 2012-08-17T05:51:52.150 回答
2

将所有元素按#divTestArea2原样移入 adiv并将被删除到#divTestArea1,然后过滤掉任何不是 a 的元素<b>并将其删除:

$("#divTestArea1").append($("*", "#divTestArea2")).find('*').filter(function() {
    return this.tagName !== 'B';
}).remove();

小提琴

以上保持#divTestArea1元素完整,删除除元素之外的所有<b>内容,例如:

$('body')​.append($('b'))​.find('*')​.not('b')​.remove();​

小提琴

于 2012-08-17T06:05:14.660 回答
2

我更喜欢.detach().

var $body = $("body");
var $b = $("b", $body).detach();
$(":not(b)", $body).remove();​​​​​​​​​​​
$body.append($b);

这样您就不需要移动或克隆任何东西来克服删除包装<b/>元素的对象的问题。

(演示)

于 2012-08-17T06:13:25.567 回答
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();

演示:http: //jsfiddle.net/3f2Hu/

于 2012-08-17T06:07:11.917 回答