jQuery:查找重复的 ID 并删除除第一个之外的所有 ID

Posted

技术标签:

【中文标题】jQuery:查找重复的 ID 并删除除第一个之外的所有 ID【英文标题】:jQuery: Finding duplicate ID's and removing all but the first 【发布时间】:2013-03-23 11:56:46 【问题描述】:
    $('[id]').each(function () 

        var ids = $('[id="' + this.id + '"]');

        // remove duplicate IDs
        if (ids.length > 1 && ids[0] == this) $('#' + this.id).remove();

    );

上面将删除第一个重复的 ID,但我想删除最后一个。我试过$('#'+ this.id + ':last'),但无济于事。

Fiddle

在小提琴中,当附加操作发生时,应保留值为“sample”的输入。

【问题讨论】:

【参考方案1】:

尝试使用以下功能对我来说效果很好:

 $('#favourities-ajax ul li').each(function(i) 
      $('[id="' + this.id + '"]').slice(1).remove();
      );

【讨论】:

【参考方案2】:

使用 jquery 过滤器:gt(0) 排除第一个元素。

$('[id]').each(function () 
    $('[id="' + this.id + '"]:gt(0)').remove();
);

或者选择所有可用元素,然后使用.slice(1)排除第一个元素。

$('[id]').each(function (i) 
    $('[id="' + this.id + '"]').slice(1).remove();
);

【讨论】:

$(this).attr('id') === this.id 而不是使用:gt(0) 重复选择器,您可以使用ids.slice(1) 来获取除ids 中的第0 个元素之外的所有内容 我想删除最后一个元素。我该怎么办?? 我试过 $('.product').slice(0).remove();它正在删除所有产品【参考方案3】:
$('[id]').each(function() 
   var $ids = $('[id=' + this.id + ']');
   if ($ids.length > 1) 
     if(this.id === your_id)//which is duplicating
         $ids.not(':first').remove();
     
);

【讨论】:

请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为何能解决问题的说明。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。 它将删除重复的 id 留下第一个,这有助于删除重复的 id ...... 它将删除除第一个之外的所有重复 id【参考方案4】:

你可以试试

$("#ID").nextAll().remove();

【讨论】:

他可以试试,但是不行。它将删除 #id 的所有后续兄弟姐妹,无论它们具有什么元素或 ID。【参考方案5】:

试试这个

var duplicated = ;

$('[id]').each(function ()    

    var ids = $('[id="' + this.id + '"]');

    if ( ids.length <= 1 ) return  ;

    if ( !duplicated[ this.id ] )
         duplicated[ this.id ] = [];   
           

    duplicated[ this.id ].push( this );

);

// remove duplicate last ID, for elems > 1 
for ( var i in duplicated)

    if ( duplicated.hasOwnProperty(i) )  

             $( duplicated[i].pop() ).remove();            
    

而 jsfiddle 是 http://jsfiddle.net/z4VYw/5/

【讨论】:

pop 只会返回一个元素。【参考方案6】:

这段代码比其他一些代码长,但双嵌套循环应该使其操作显而易见。

这种方法的优点是它只需要扫描 DOM 以生成具有id 属性的元素列表一次,然后使用相同的列表来查找(和删除)重复。

已删除的元素将具有parentNode === null,因此可以在遍历数组时跳过。

var $elems = $('[id]');
var n = $elems.length;

for (var i = 0; i < n; ++i) 
    var el = $elems[i];
    if (el.parentNode)   // ignore elements that aren't in the DOM any more
        var id = el.id;
        for (var j = i + 1; j < n; ++j) 
            var cmp = $elems[j];
            if (cmp.parentNode && (cmp.id === id)) 
                $(cmp).remove();  // use jQuery to ensure data/events are unbound
            
        
    

【讨论】:

【参考方案7】:

试试:

 $('[id="' + this.id + '"]:not(#" + this.id + ":first)').remove();

【讨论】:

【参考方案8】:

我会使用not()ids 中删除当前元素并删除其余元素:

(Fiddle)

$('body').on("click", ".placeholder", function() 

    data = '<section id="e1"><input name="e1name" /></section><section id="two"><input name="two" value="two section" /></section>';

    $('form').append(data);

        // ideally I'd like to run this function after append but after googling I find that's not possible.
        // for each ID ...
        $('[id]').each(function () 

            var ids = $('[id="' + this.id + '"]');

            if (ids.length>1)                     
                ids.not(this).remove();            
            

            return;

        );

);

【讨论】:

以上是关于jQuery:查找重复的 ID 并删除除第一个之外的所有 ID的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 删除一个下拉菜单中除第一个option之外的所有option

MySql:更新除第一行之外的所有内容[重复]

如何删除除第一个之外的所有 URL 哈希?

MySQL - 查询除第一行之外的所有行[重复]

删除 VIM 中除第一列之外的所有内容

使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点