我有一个下面的表格,我想克隆,增加id(att1)和它的输入,textareas等,并附加到与会者div。任何帮助非常感谢。一直在破坏我的头......
我只有......
$(function () {
var index = 1;
$(".add").click(function () {
index++;
$("#att1").clone(true).removeAttr("id").attr("id", "att" + index).appendTo("#attendees");
alert(index);
});
});
HTML:
<div id="attendees">
<div id="att1">
<fieldset>
<legend><span class="legend">Attendee 1 Booking Details</span></legend>
<p name="test">
<label for="A_Title_1">Title: <span class="req">*</span></label>
<input name="A_Title_1" id="A_Title_1" value="" type="text" class="f_input" />
</p>
<p>
<label for="A_Forename_1">Forename: <span class="req">*</span></label>
<input name="A_Forename_1" id="A_Forename_1" type="text" class="f_input" />
</p>
<p>
<label for="A_Surname_1">Surname: <span class="req">*</span></label>
<input name="A_Surname_1" id="A_Surname_1" type="text" class="f_input" />
</p>
<p>
<label for="A_Info_1">Additional Info: </label>
<textarea name="A_Info_1" id="A_Info_1" cols="20" rows="10"></textarea>
<span class="info">Please include any infomation relating to dietary/ access/special requirements you might have.</span>
</p>
</fieldset>
</div>
<a href="#" class="add">Add more</a>
</div>
答案 0 :(得分:18)
请参阅fiddle。
将一个班级attendee
添加到div id="att1"
<div id="att1" class="attendee">
和JS:
$(function(){
var template = $('#attendees .attendee:first').clone(),
attendeesCount = 1;
var addAttendee = function(){
attendeesCount++;
var attendee = template.clone().find(':input').each(function(){
var newId = this.id.substring(0, this.id.length-1) + attendeesCount;
$(this).prev().attr('for', newId); // update label for (assume prev sib is label)
this.name = this.id = newId; // update id and name (assume the same)
}).end() // back to .attendee
.attr('id', 'att' + attendeesCount) // update attendee id
.prependTo('#attendees'); // add to container
};
$('.add').click(addAttendee); // attach event
});
答案 1 :(得分:1)
试试这个
empty_html = $('#att1').html();
$('.add').click(function() {
last_id = $('#attendees div:last').attr('id').replace('attr','');
next_id = last_id++;
new_div = $('<div id="' + next_id + '">' + empty_html +'<div>');
$('#attendees').append(new_div);
});
需要对HTML进行一些调整,我会将添加链接移出与会者div。
答案 2 :(得分:0)
此示例可能对您有所帮助。 example
$(function() {
var scntDiv = $('#p_scents');
var i = $('#p_scents p').size() + 1;
$(document).on('click','#addScnt', function() {
$('<p><label for="p_scnts"><input type="text" id="p_scnt" size="20" name="p_scnt_' + i +'" value="" placeholder="Input Value" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv);
i++;
return false;
});
$(document).on('click','#remScnt', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});
答案 3 :(得分:0)
我知道它的旧线程..我只想简单地分享增加id的方法。我在所有克隆元素中使用相同的类
更新:
这种更优雅的方式:
var clone_counter = 1; // global variable
$('.clone').click(function(){
$('.clonethis').clone();
console.log(clone_counter);
clone_counter++;
});
答案 4 :(得分:0)
I posted this same answer elsewhere,但我认为它也适用于这个问题。
我创造了一个&#39;原作&#39;元素并将其隐藏在页面上。我追加了#34; ---&#34;至需要在原始元素的任何子元素内递增的任何属性的值。
每当用户点击按钮创建原始克隆时,我创建了一个克隆,然后全局替换&#34; ---&#34;使用该克隆的HTML中的当前索引。像这样:
var $clone = $original.clone();
var cloneHTML = $clone.html().replace(/---/g, incrementedFieldNum);
$clone.html(cloneHTML);
// Insert and show the clone after the original
$original.after($clone);
我使用data属性来存储incrementedFieldNum的更新值(未在上面的代码中显示)。
希望这会有所帮助。它的代码少得多,而且我认为这是一个更通用的解决方案。我有很多嵌套元素需要增加ID和名称,所以像@Fierceblood那样的解决方案是不切实际的。