我想创建一个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