Javascript jQuery选择具有相同ID的所有项目

Javascript jQuery选择具有相同ID的所有项目,javascript,jquery,html,Javascript,Jquery,Html,我知道它不好,我知道ID是唯一的,我需要在一些页面上大规模地修复它 我不知道那个些ID是什么,我只知道它的类别,所以有可能吗 $('.someClass').itemsThatHasIdDuplicate().each(function(){ $(this).attr('id', Math.random()); //its stupid to use random for ID, but shows what I mean }); 另外,我已经找到了,但这是假设您知道ID是什么。您可以

我知道它不好,我知道ID是唯一的,我需要在一些页面上大规模地修复它

我不知道那个些ID是什么,我只知道它的类别,所以有可能吗

$('.someClass').itemsThatHasIdDuplicate().each(function(){
    $(this).attr('id', Math.random()); //its stupid to use random for ID, but shows what I mean
});
另外,我已经找到了,但这是假设您知道ID是什么。

您可以使用:


演示:

首先,向具有相同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()

您可以做的是迭代该类的所有元素,并使用相同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')
必须确保不覆盖原始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的第一个实例是什么


编辑:这样您就可以链接它
$('.foo').fixtupes().css('color','red')

它将更改类的所有元素,而不仅仅是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');
        }
    });
});