Javascript 如何从主体中删除重复的dom元素?
我已经在body中克隆了类名为“combo”的div replicate元素。我需要删除除原始div元素之外的所有重复项在某处保留对克隆元素的引用(例如数组)。循环该数组,并对每个值调用Javascript 如何从主体中删除重复的dom元素?,javascript,Javascript,我已经在body中克隆了类名为“combo”的div replicate元素。我需要删除除原始div元素之外的所有重复项在某处保留对克隆元素的引用(例如数组)。循环该数组,并对每个值调用foo.parentNode.removeChild(foo)。var fn=function(originalEl){ var fn = function(originalEl){ var els = document.querySelectorAll('.combo'); for(var
foo.parentNode.removeChild(foo)
。var fn=function(originalEl){
var fn = function(originalEl){
var els = document.querySelectorAll('.combo');
for(var i=0; i<els.length; i++){
if( els[i] !== originalEl ){
els[i].parentNode.removeChild(els[i]);
}
}
}
var els=document.querySelectorAll('.combo');
对于(var i=0;i而言,问题在于克隆对象将具有与原始对象相同的属性,因此很难区分它们,但是,您可以尝试以下方法:
(function()
{
//or indeed: querySelector('.combo') which returns a single DOM ref
var original = document.querySelectorAll('.combo')[0];//reference to the original
//clone and add
function removeClones()
{
var i,all = document.querySelectorAll('.combo');
for(i=0;i<all.length;i++)
{
if (all[i] !== original)
{//this is a clone
all[i].parentNode.removeChild(all[i]);
}
}
}
}());
只有使用原生JavaScript?原始元素和克隆元素之间必须有区别。如果是这样,那么使用筛选器方法。当克隆这些元素时,除了“COMPO”之外,还可以考虑给它们另一个类名。@ Jack:C.我的答案是:可能已经添加了代码<索引>=0 < /代码>,以避免删除所有元素。t假定原始项是文档中的第一项。克隆的项可能已插入到它之前。或者保留对原始项的单个引用,并使用节点===original
分支?或var original=document.querySelector('.combo');
;)我喜欢第二种替代方法。我会给你一个比较点。但是,当你发表评论时,我正在编辑我的代码。此外,你的实现是错误的,因为它只在原始节点存在之后,但在添加额外节点之前执行。如果原始节点是ad呢删除克隆后的某个时间声明了吗?我的实现是正确的,因为用户在请求删除重复项时应该传递对原始节点的引用。最后,是的,它是一个节点列表而不是数组。所以,至少你是对的。@chandru,欢迎你接受你想要的任何答案。但是请注意,这个答案中有一个严重的错误。J必须注意。@Geuis:你不能克隆一个不存在的元素。我不知道OP将如何实现这段代码,这取决于他。我只是将它包装在一个IIFE中,以便在函数中包含一个引用以删除克隆。如果原始元素不存在,那么他应该创建一个返回闭包的函数。顺便说一句:当我发表评论时,你正在编辑你的帖子…臭虫呐喊。所以我通过心灵感应复制了你的答案?如果你再次查看我的评论,你会注意到我从未说过索引!==0可以避免删除原始节点
var clone = original.cloneNode(true);
clone.className += ' combo-clone';
//then, to remove:
var clones = document.querySelectorAll('combo-clone');//selects all clones