我不关心表单中的内容,只想在每次点击添加时添加一组新内容。然而,我将添加一些条件字段。但考虑到这一点,我真的需要迭代ID吗?克隆事件是解决此问题的最佳方法吗?
<div id="wrapper">
<div id="condition-1">
<select id="trigger-1" class="trigger">
<option value="0">Select...</option>
<option value="1">View Count</option>
<option value="2">Comment Count</option>
</select>
<select id="operator-1" class="operator">
<option value="0">Select...</option>
<option value="1">Is Greater Then</option>
<option value="2">Less Than</option>
</select>
<div id="input-1" class="input">
<input id="number-1"></input>
</div>
</div>
<div id="add-1" class="add">Add more</div>
我一直在挖掘jQuery .clone()的很多例子,但是没能将任何例子应用到这样的结构中。我的目标是每次点击&#34;添加更多&#34;时添加一组新的表单元素。我不在乎它是否克隆了实际内容,只是想克隆然后适当地迭代id。
我尝试使用类似的东西:
var cur_num = 1;
var cloned = $("#condition-" + cur_num).clone(true, true).get(0);
++cur_num;
cloned.id = "condition-" + cur_num; // Change the div itself.
$(cloned).find("*").each(function(index, element) { // And all inner elements.
if(element.id)
{
var matches = element.id.match(/(.+)_\d+/);
if(matches && matches.length >= 2) // Captures start at [1].
element.id = matches[1] + "-" + cur_num;
}
});
$(cloned).appendTo($("#condition-wrapper"));*/
上面的代码块将克隆并附加我想要的块。但是当它将第一个条件id迭代到#condition-2时,后面的每个块都出现了#condition-2而我不知道如何将condition-1的子节点更改为trigger-2 operator-2。感谢任何帮助,谢谢!
答案 0 :(得分:0)
试试这个
$(function(){
$('.add').bind('click',function(){
var $this=$(this),
$cloned=$this.prev().clone(),
re=/(\d+)$/,
counter=1,
cid=$cloned.attr('id').replace(re,function(n){
return counter+=parseInt(n);
});
$cloned.attr({id:cid})
.find('[id]')
.each(function(i,o){
var iid=$(o).attr('id').replace(re,counter);
$(o).attr({id:iid});
})
.end()
.insertBefore($this);
});
})