jquery。删除性能

时间:2012-02-07 16:39:13

标签: javascript jquery performance

我试图在多个div中删除带有条件的符号。

<div>
    <ul>
        <li class="sel">.....</li>
        <li class="sel">.....</li>
         ............
        <li>.....</li>
        <li>.....</li>
         ...........
         <!-- I have some 600 li's -->
    </ul>
</div>

我与class='sel'有200个li。现在我需要删除剩下的400个li。

我试图以两种方式删除,例如,

$("ul", this).each(function(){
    $("li", this).each(function(){
        $(this).remove();
        //Also tried with -- $(this).empty().remove();
    });
});

其他方式,

$("ul", this).each(function(){
    $("li[class!=sel]", this).remove(); // Also tried with 'not'
});

现在的问题是,当我尝试执行这些方法时,在IE中遇到脚本重载错误。

请帮我解决其他删除不需要的邮箱的方法。

注意:我不想让不想要的li保持hide()状态。

提前致谢...

3 个答案:

答案 0 :(得分:4)

如果您使用的是Attribute Not Equal Selector,则无需将其与.each()一起打包 - 只需将其称为:

$('li[class!="sel"]').remove();

选择器('li[class!="sel"]')抓取所有没有类<li>的{​​{1}}个元素,然后在整个元素集上调用sel方法。< / p>

Demo

修改

如果您只想定位包含remove()元素的<ul>,可以像这样设置上下文:

<li class="sel"></li>

答案 1 :(得分:3)

对于它的价值,几周前我遇到了类似的问题,仅在IE8中,甚至在由id选择的单个项目上调用.remove()。问题仅发生当元素包含大量内容时。

我所做的是在调用.html('')之前调用.remove()清除元素。这大大缩短了时间(亚秒)。

我的情况显然是另一种情况(一个元素与多个元素,由id与上下文选择器选择,不确定您的li内容是什么,等等),但它可能值得一试

$("ul", this).each(function(){
    $("li[class!=sel]", this).html('').remove();
});

答案 2 :(得分:1)

尝试分离ul,删除li,然后重新连接ul。

$("ul", this).detach().find("li").not(".sel").remove().end().end().appendTo(this);

这可以防止浏览器重绘,直到删除所有需要删除的li。