2012-10-08 160 views
0

我有一個允許用戶動態添加元素(可能是字段集或文本框)的表單。我可以在添加元素時爲元素分配一個新的ID,但是我無法按順序添加它,因爲用戶也可以在元素之間添加元素。更改html元素的ID

因此,例如,有一個名爲XXX1的Id,並且用戶在它之後添加一個新的元素,它是xxx2。現在,如果用戶在XXX1後再次添加新元素,則會顯示爲XXX3。所以元素的順序是XXX1,XXX3,XXX2。當它被添加時,我無法控制名稱。所以我試圖在添加後重新分配名稱。

我試圖讓數組中的所有元素,並更改ID如下

document.getElementById('xxx3').setAttribute('id', 'xxx2'); 

但這不起作用爲ID XXX2已經存在另一種元素。請幫我解決這個問題。

+1

如果你只改變了順序着想的ID,我會離開它 - 這是很少* *需求發生什麼。 –

+0

我看不清楚爲什麼你需要這樣做 - 我只是保持原樣。否則,它聽起來像一個正常的「交換兩個變量」類型的情況。 – freefaller

+0

順便說一下,id會重置,只有問題是你會有2個元素的id爲xxx2 –

回答

0

那麼,爲什麼不先改變xxx2的ID,將它移開,然後再放回原位?

document.getElementById('xxx2').setAttribute('id', 'temporaryId'); 
document.getElementById('xxx3').setAttribute('id', 'xxx2'); 
document.getElementById('temporaryId').setAttribute('id', 'xxx3'); 
+0

如果你打算使用一個臨時的虛擬ID,那麼你不必先改變'xxx2'。 – BoltClock

+0

如何?我這樣做是因爲具有相同ID值的元素在HTML中是非法的。 –

+0

我的意思是,你可以簡單地將'xxx3'設置爲臨時ID,然後將'xxx2'移動到'xxx3'並將temp改爲'xxx2'。 – BoltClock

0

爲什麼不從最後一個元素到第一個(在插入位置之後的那個元素)並向ID添加一個?

例如:

var insertAt = 2; // for an element to be called xxx2 
var els = [...]; // an array with all of the elements 
if(els.length >= insertAt){ 
    for(var i = els.length-1; i >= insertAt-1; --i){ 
    els[i].setAttribute('id', 'xxx'+(i+2)); 
    } 
} 
// Add the new element here which will be called xxx2