Javascript 如何从主体中删除重复的dom元素?

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

我已经在body中克隆了类名为“combo”的div replicate元素。我需要删除除原始div元素之外的所有重复项

在某处保留对克隆元素的引用(例如数组)。循环该数组,并对每个值调用
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