jQuery: Finding duplicate ID's and removing all but the first
Solution 1
Use jquery filter :gt(0)
to exclude first element.
$('[id]').each(function () {
$('[id="' + this.id + '"]:gt(0)').remove();
});
Or select all the available elements, then exclude the first element using .slice(1)
.
$('[id]').each(function (i) {
$('[id="' + this.id + '"]').slice(1).remove();
});
Solution 2
Try:
$('[id="' + this.id + '"]:not(#" + this.id + ":first)').remove();
Solution 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();
}
});
Solution 4
try this
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();
}
}
and jsfiddle is http://jsfiddle.net/z4VYw/5/
Solution 5
This code is longer than some of the others, but the double-nested loop should make its operation obvious.
The advantage of this approach is that it only has to scan the DOM to generate the list of elements with an id
attribute once, and then uses the same list to find (and remove) the duplicates.
Elements that were already removed will have parentNode === null
so can be skipped while iterating over the array.
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
}
}
}
}
![ditto](https://i.stack.imgur.com/uU42s.jpg?s=256&g=1)
ditto
Updated on August 22, 2020Comments
-
ditto almost 4 years
$('[id]').each(function () { var ids = $('[id="' + this.id + '"]'); // remove duplicate IDs if (ids.length > 1 && ids[0] == this) $('#' + this.id).remove(); });
The above will remove the first duplicate ID, however I want to remove the last. I've tried
$('#'+ this.id + ':last')
but to no avail.In the fiddle the input with the value 'sample' should be kept when the append action takes place.
-
Alnitak over 11 years
$(this).attr('id') === this.id
-
Alnitak over 11 years
pop
will only return one element. -
Alnitak over 11 yearsrather than repeating the selector with
:gt(0)
you could just useids.slice(1)
to get everything except the 0th element inids
-
SuperBiasedMan almost 9 yearsPlease consider editing your post to add more explanation about what your code does and why it will solve the problem. An answer that mostly just contains code (even if it's working) usually wont help the OP to understand their problem.
-
user2254898 almost 9 yearsit will remove the duplicate ids leaving the first one ,it is helpful to remove duplicate ids.............
-
user2254898 almost 9 yearsit'll remove all duplicate ids except the first one
-
Devi A about 5 yearsI want delete last element.. For that what should I do??
-
Devi A about 5 yearsI tried $('.product').slice(0).remove(); it is deleting all products