如何从jQuery对象中删除一个元素?

7

代码:

<div id="d1">d1</div>
<div id="d2">d2</div>
<script>
$(function(){
    var j=$();
    j=j.add("#d1");
    j=j.add("#d2");

    j.remove("#d1");//not this...
    //alert(j.length);
    j.css("border","1px solid red");
});
</script>

我已经使用 j.add() 来添加元素到 j 中,但是如何从 j 中移除 #d1 呢? j.remove() 并不起作用,因为它会移除 #d1,但是 j.length 仍然是2。
谢谢大家! :)
5个回答

12
<div id="d1">d1</div>
<div id="d2">d2</div>
<script>
$(function(){
 var j=$();
 j=j.add("#d1");
 j=j.add("#d2");

 j=j.not("#d1");
 //alert(j.length);
 j.css("border","1px solid red");
});
</script>

演示


1
<div id="d1">d1</div>
<div id="d2">d2</div>

$(function(){
    var j=$("#d1, #d2");
    j.filter(":not( #d1 )").css("border","1px solid red");
});

1
问题在于,操作方法(例如add())不会直接修改对象(集合),而是返回一个已更改的集合。因此,您需要将remove() not()的返回值重新赋值给j
j.remove("#d1");//not this...

应该是

j = j.not("#d1");//not this...

remove() vs. not()

remove()会将匹配的元素从DOM中删除(而不是集合),而not()会将匹配的元素从给定的匹配中删除,但不会改变DOM。我认为你需要使用not()


0

使用 jQuery grep() 函数:

<div id="d1">d1</div>
<div id="d2">d2</div>
<script>
$(function(){
    var j=$();
    j=j.add("#d1");
    j=j.add("#d2");

    j = jQuery.grep(arr, function(item){
        return item != '#d1';
    });
    j.css("border","1px solid red");
});
</script>

为什么?这似乎有点复杂 :) - jensgram
当然,为了可扩展性,以防过滤器需要变得更加复杂。但是我同意,对于这种特定情况,所选择的答案完全可以胜任。 - Valentin Flachsel

0

请尝试以下代码:

j.find("#d1").remove();

如果不是:

j.filter("#d1").remove();

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