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的主要内容,如果未能解决你的问题,请参考以下文章