如何删除具有特定id的dom元素

时间:2011-03-18 06:42:25

标签: javascript jquery

我发现我可以像这样克制id:

var unic = $('div.hidde').find('li').map(function(i, v) { return this.id; }).get();
var unic1 = $('div.hi').find('li').map(function(i, v) { return this.id; }).get();

我可以使用这个脚本组合它们:

var intersection = [];       
$(liList).each(function () {
    for (i in unic) {
        for (j in unic1) {
            if (unic[i] == unic1[j]) intersection.push(unic[i]);
        }
    }
});
alert(intersection);

另一个问题是如何删除交集返回的id的<li>'s

2 个答案:

答案 0 :(得分:4)

intersection列出了两个数组中存在的所有ids

$('li').filter(function() {
    return $.inArray(this.id, intersection) !== -1;
}).remove();

jsFiddle

答案 1 :(得分:4)

如果intersection是ID列表,那就非常简单了。

使用直接DOM方法(没有jQuery),您可以使用getElementById查找每个元素,parentNode以获取其父节点,然后使用removeChild将其删除:

var index;
for (index = 0; index < intersection.length; ++index) {
    elm = document.getElementById(intersection[index]);
    elm.parentNode.removeChild(elm);
}

但是值得注意的是jQuery在getElementById的{​​{3}}左右工作,所以如果你已经在使用jQuery,你可能也想用它来获得这些解决方法的优势。

或者使用jQuery的bugs in IE6's and IE7's implementation

var index;
for (index = 0; index < intersection.length; ++index) {
    $("#" + intersection[index]).remove();
}

或者如果您愿意,可以使用jQuery的removeremove

$.each(intersection, function(index, value) {
    $("#" + value).remove();
});

更新2011/04/29 :或者您可以利用Array#join创建#id1, #id2, #id3形式的选择器,然后通过一次调用将其删除:

$('#' + intersection.join(', #')).remove();

更新:有一些关于确保元素是li元素的讨论。如果你真的需要这样做,这里有三个,修改过:

Straight DOM(添加了if):

var index;
for (index = 0; index < intersection.length; ++index) {
    elm = document.getElementById(intersection[index]);
    if (elm.tagName === "LI") {
        elm.parentNode.removeChild(elm);
    }
}

jQuery选项(字面意思只是在“#”前加上“li”来表示“具有此ID的元素,但只有当它是li”时才会出现:)

For loop:

var index;
for (index = 0; index < intersection.length; ++index) {
    $("li#" + intersection[index]).remove();
}

使用each

$.each(intersection, function(index, value) {
    $("li#" + value).remove();
});

更新2011/04/29 :使用Array#join

$('li#' + intersection.join(', li#')).remove();