2013-10-25 221 views
1

我知道它的不好,我知道ID是唯一的,我需要在一些頁面上大規模地修復它。jQuery選擇所有具有相同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是什麼。

回答

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所有的

+0

它將改變類的所有元素,不僅是那些已經ID重複。 – pie6k

+0

@ Kluska000:我更新了代碼w/a小提琴演示 –

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

FYI:我建議你選擇日期時間分配的ID,而不是使用math.random()

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')搜索文檔只有一次,開頭。

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/

編輯:also, in a plugin form這樣你就可以IT連鎖$('.foo').fixDupes().css('color', 'red');

相關問題