1

我知道这很糟糕,我知道 ID 是唯一的,我需要在某些页面上大规模修复它。

我不知道那些ID是什么,我只知道它的类,所以有可能以某种方式做

$('.someClass').itemsThatHasIdDuplicate().each(function(){
    $(this).attr('id', Math.random()); //its stupid to use random for ID, but shows what I mean
});

附言。我找到了这个,但这假设你知道 ID 是什么。

4

4 回答 4

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);
});

演示:小提琴

于 2013-10-25T07:35:14.070 回答
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()

于 2013-10-25T07:47:48.863 回答
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')

于 2013-10-25T07:52:44.407 回答
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 的第一个实例是什么。

http://jsfiddle.net/g2DWR/1/

编辑:另外,以插件形式,因此您可以链接它$('.foo').fixDupes().css('color', 'red');

于 2013-10-25T07:53:03.413 回答