除了粗体之外,Jquery删除所有内容

时间:2012-08-17 05:45:32

标签: javascript jquery html selector jsoup

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

5 个答案:

答案 0 :(得分:5)

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

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

DEMO

答案 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();

FIDDLE

以上内容保持#divTestArea1元素不变,删除所有<b>元素,如:

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

FIDDLE

答案 3 :(得分:2)

我更喜欢.detach()

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

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

(demo)

答案 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();

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