【发布时间】:2016-03-01 17:37:55
【问题描述】:
我想克隆一个选择并更新 name 和 id 值。选择在 <tr><td> 内
<table>
<tr id="tr_1">
<td id="td_1">
<select name="tech_1" id="tech_1">
<option value="0">Please Select</option>
<option value="1">Mango</option>
<option value="2">Apple</option>
<option value="3">Banana</option>
<option value="4">Orange</option>
</select>
</td>
</tr>
</table>
<input type="button" id="btnClone" value="Clone" />
我可以在没有桌子的情况下做到这一点,但我的挑战是将克隆放入新的 <tr><td> ... </td></tr>
这是我的 jquery:
$("#btnClone").bind("click", function () {
// get the last SELECT which ID starts with ^= "tech_"
var $tr = $('tr[id^="tr_"]:last');
// get the last SELECT which ID starts with ^= "tech_"
var $select = $('select[id^="tech_"]:last');
// Read the Number from that SELECT's ID (i.e: 3 from "tech_3")
// And increment that number by 1
var num = parseInt( $select.prop("id").match(/\d+/g), 10 ) +1;
// Clone it and assign the new ID (i.e: from num 4 to ID "tech_4")
var $klon = $select.clone().prop('id', 'tech_'+num ).prop('name', 'tech_'+num );
// Finally insert $klon wherever you want
$tr.after("<tr><td>").after($klon).after("</td></tr>");
});
此代码导致克隆的<select> 在原始下方,而新的<tr><td> 和</td></tr> 之间没有任何内容
【问题讨论】:
-
您使用的是什么版本的 jQuery?这可能不是问题,但自从我看到使用
bind()以来已经有很长时间了(我建议改用on(),但这可能是我个人的熟悉和偏好)。顺便说一句,您使用所有这些id属性吗?看来你让自己的生活变得困难了。顺便说一句,你的按钮在哪里?<table>之外的某个地方?您是有意克隆特定的<select>,还是仅克隆 last<select>元素? -
任何时候我看到像
$("[id^=xxx_"])这样的选择器都表明你应该使用一个类。 -
我已将按钮代码添加到此问题中。它在原始代码中。我想克隆最后一个
<select>元素,用户可以根据需要添加任意数量的<select>元素,每个元素都有一个唯一的 ID。
标签: javascript jquery