我决定使用jquery来创建下拉菜单的副本,而不是使用我的perl脚本。我遇到了一个问题。
我有一系列可以多次克隆的投放箱。结构是这样的:
<div id="org_dropmenus_asdf">
<table border="0">
<tr>
<td valign="top">
<select name="wimpy_asdf_1" id="wimpy_asdf_1" size="4">
<option value='1'>1</option>
<option value='2'>2</option>
</select>;
</td>
<td valign="top">
<select name="monkey_asdf_1" id="monkey_asdf_1" size="4">
<option value='c'>c</option>
<option value='d'>d</option>
</select>;
</td>
</tr>
</table><p>
</div>|;
我克隆var $ cloneDiv = $('#org_dropmenus_asdf')。clone();
如何搜索和替换asdf_1(“1”)并使用新值递增?
答案 0 :(得分:1)
你需要做一些事情:
var counter = 1;
$cloneDiv = $('#org_dropmenus_asdf').clone().find('[id]').attr('id', function(idx, oldId){
return oldId.substr(0, -1) + counter;
}).attr('name', function (idx, oldName) {
return oldName.substr(0, -1) + counter;
});
您可以反复执行此操作,每次递增counter
。请注意,此代码最多只能使用9,因为它会删除最后一个字符;需要在10以上删除更多字符。
另请注意,这不会更改org_dropmenus_asdf
id属性,该属性也需要针对有效DOM进行更改。
答案 1 :(得分:1)
function incrementId(idString) {
// split it at the underscore
var pieces = idString.split("_");
// if there is a fourth element, then it just needs incrementing
if (pieces[3]) {
pieces[3] = parseInt(pieces[3]) + 1;
// if not, then it needs to be added
} else {
pieces[3] = "1";
}
// reconstruct the ID by joining with the underscore character
return pieces.join("_");
}
$cloneDiv = $('#org_dropmenus_asdf').clone();
// get the ID of the last 'org_dropmenus_asdf' div and increment
var lastDivId = incrementId($("div[id^=org_dropmenus_asdf]:last").attr("id"));
// get the IDs of the contained select elements, and increment
var selectIds = $("div[id^=org_dropmenus_asdf]:last select").map(function() {
return incrementId(this.id);
}).get();
alert(lastDivId);
alert(selectIds);
部分演示+概念验证:http://jsfiddle.net/karim79/fL9ve/2/
答案 2 :(得分:1)
这是解决此问题的另一种方法。 我将id和name用作数组,这样就可以更轻松地发布到PHP并进行处理而不需要太多努力。 这会占用两个字段名称,我可以在发布时链接它们。它是一个选择和一个文本字段。 这是在我添加了一个克隆后发生的。
var newid = Number($('.table_id').last().find(':text').attr('id').substr(-2,1)) + 1;
$('.table_id').last().find(':text').attr('id','detailValue['+newid+']').attr('name','detailValue['+newid+']');
$('.table_id').last().find(':select').attr('id','detailValue['+newid+']').attr('name','detailValue['+newid+']');