我知道它很糟糕,我知道ID是独一无二的,我需要在某些页面上大规模修复它。
我不知道那些ID是什么,我只知道它的类,所以有可能以某种方式做
$('.someClass').itemsThatHasIdDuplicate().each(function(){
$(this).attr('id', Math.random()); //its stupid to use random for ID, but shows what I mean
});
PS。我找到了this,但这假设您知道ID是什么。
答案 0 :(得分:3)
您可以使用.attr( attributeName, function(index, attr) )
:
// Get all the items with Duplicate id
var $itemsThatHasIdDuplicate = $('[id]').filter(function () {
return $('[id="' + this.id + '"]').length > 1;
});
// Modify the id for all of them
$itemsThatHasIdDuplicate.attr('id', function (i, val) {
return 'newID' + (i + 1);
});
演示:Fiddle
答案 1 :(得分:0)
首先,为具有相同id的所有元素添加一些类。
$('[id]').each(function(){
var ids = $('[id="'+this.id+'"]');
if(ids.length>1 && ids[0]==this){
$('#'+this.id).addClass('changeID');
}
});
然后更改具有该类的所有元素的id ...
$('.changeID').each(function(){
$(this).attr("id","changed_"+Math.random());
}
仅供参考:我建议您选择日期时间来分配ID,而不是使用math.random()
答案 2 :(得分:0)
您可以做的是迭代该类的所有元素,并使用相同的ID对这些元素进行分组。然后修改具有多个元素的组:
var IDs = {};
var idModifier = function(index, id) {
return id + index;
};
$('.someClass').each(function() {
(IDs[this.id] || (IDs[this.id] = [])).push(this);
});
$.each(IDs, function(id, elements) {
if (elements.length > 1) {
$(elements).prop('id', idModifier);
}
});
此方法的“优点”是您只在$('.someClass')
开头搜索文档一次。
答案 3 :(得分:0)
您必须确保不会覆盖原始ID
var cls = 'foo';
$('.' + cls).each(function() {
var me = this;
var id = $(me).attr('id');
var dupes = $('#' + id + '.' + cls);
dupes.each(function() {
if(this != me) {
$(this).attr('id', id + '_r_' + Math.random());
}
else {
$(this).attr('id', id + '_o');
}
});
});
通过这种方式,您还可以了解每个ID的第一个实例。
修改:also, in a plugin form,以便将其链接$('.foo').fixDupes().css('color', 'red');