我想創建一個HTML表格使用jQuery和上下文菜單插件的複製/粘貼系統,我試圖唯一地命名所有新創建的行。所以我有一個克隆所選擇的行和插入上述新行的函數:使用jQuery的.length檢測現有元素沒有看到新創建的元素
function cloneAbove(TR) {
var newRow = $(TR).clone();
var lastID = $(TR).attr('id');
var newID = Number(lastID.substring(3))-0.1;
//See if that row already exists:
if($('#tr_'+newID).length){
alert('#tr_'+newID+' Exists');
//If it does exist, we divide the newID by 10 until we find one that doesn't:
var i = 0;
while(i < 1){
newID = newID/10;
if($('#tr_'+newID).length > 0){
i = 1;
}
}
}
$(newRow).attr('id','tr_'+newID);
$(TR).before(newRow);
$(".target").contextmenu(option);
}
首先,它克隆所選擇的行(即:「#TR_1」),爲新的行的id減去0.1(即: '#tr_0.9'),那麼它應該檢查該id是否已經存在 - 這是我的問題所在 - 如果它存在,它將進入一個循環,除以10直到找到一個沒有的id。
下面是表的樣本:
<table id="table" border=1>
<tr class="target" id="tr_1" oncontextmenu="context('tr1')">
<td id="tr_1_1">Row1</td>
<td id="tr_1_2">Row1</td>
</tr>
<tr class="target" id="tr_2" oncontextmenu="context('tr2')">
<td id="tr_2_1">Row2</td>
<td id="tr_2_2">Row2</td>
</tr>
</table>
的。長度適用於「硬編碼」的元素,因爲它們存在的頁面加載時,但它不會檢測到任何新創建的元素。有什麼建議麼?
這有效,但我明白你的意思,我的方法顯然有缺陷。該表將包含與他們的TR的ID相同的命名約定的表單字段,並且我可以在通過POST(PHP)發送它們的值時看到這是一個問題。重要的是,所有字段都可以根據其父級TR輕鬆分組,並且它們按用戶創建的順序排列。因此,將tr_1複製到上面的行將給它的ID和子窗體字段名稱的結束數<1。有沒有更好的方法來完成這一點? – jreed121 2011-04-28 18:44:23
保持「身份證」價值清潔可能是一個好主意,只是爲了控制整體頭痛水平。您可以在「id」值中使用破折號和下劃線,並且如果您想繼續使用這種數字技巧,則可以將原始數值存儲在單獨的屬性中,如「data-num-id」。當爲新元素計算新的「id」時,您會使用該屬性值,但「id」字符串本身會具有「。」。變成 」-」。只是一個想法;可能還有其他方法可以去。 – Pointy 2011-04-28 18:47:14