我发现我可以像这样克制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
答案 0 :(得分:4)
intersection
列出了两个数组中存在的所有ids
。
$('li').filter(function() {
return $.inArray(this.id, intersection) !== -1;
}).remove();
答案 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的remove
和remove
:
$.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();