我正在为我的组织创建一个可重用的表单脚本。一个功能是复制表单元素。对于这个例子,我要求提供活动日期,但可以选择在活动中添加一天。
HTML
<ul>
<li>
<label>Date of event<sup>*</sup></label>
<input class="field-required" type="text" name="event_date" readonly="readonly" />
</li>
<li>
<ul class="float-fields">
<li>
<label>Start time<sup>*</sup></label>
<input class="field-required" type="text" name="event_start_time" data-validation="time" />
</li>
<li>
<label>End time<sup>*</sup></label>
<input class="field-required" type="text" name="event_end_time" data-validation="time" />
</li>
</ul>
</li>
<a class="duplicate-fields" data-fields="all">+ Add date</a>
</ul>
JavaScript(jQuery)
//duplicate fields
$('.duplicate-fields').each(function() {
//put fields in a variable
if($(this).attr('data-fields') == 'all') {
var html = $(this).parent('ul').html();
}
$(this).click(function() {
$($(this).parent('ul')).append(html);
})
});
现在这样做是复制ul的html(所有的li)并附加它,如你所料。我需要做的是排除'.duplicate-fields'链接,以便不重复链接,并将li插入现有链接之上。
我喜欢.clone()可以做的事情,但我需要将它放在一个变量中,以便我可以复制不确定数字的字段。有了克隆,我可以说:
var html = $(this).parent('ul').clone();
$(html).find('.duplicate-fields').remove();
但据我所知,如果我使用clone(),我只能复制一次。 关于我应该怎么做的任何建议?这是可重用的,因为只需要编辑HTML以备将来使用(没有特殊的类或id)。
答案 0 :(得分:1)
尝试使用for循环迭代克隆。
更新代码:
$('.duplicate-fields').each(function () {
if ($(this).attr('data-fields') == 'all') {
var noOfClones = 5;
var el = $(this).parent();
for (var i = 0; i < noOfClones; i++) {
var html = el.clone();
html.appendTo('body');
}
}
});
最后,点击a
标记时
$(document).on('click', '.duplicate-fields', function () {
var noOfClones = 5; //you can change it to repeatitve times
var el = $(this).parent();
for (var i = 0; i < noOfClones; i++) {
var html = el.clone();
html.find('a.duplicate-fields').remove(); //remove the a tag in cloned objects
html.appendTo('body'); //append back
}
});
答案 1 :(得分:0)
这个怎么样?
//duplicate fields
$('.duplicate-fields').each(function() {
//put fields in a variable
if($(this).attr('data-fields') == 'all') {
var html = $(this).parent('ul').find('li:not(:has(ul.float-fields))').html();
html += $(this).parent('ul').find('li:has(ul.float-fields)').html();
}
$(this).click(function() {
$(this).before(html);
})
});
答案 2 :(得分:0)
根据User3013738的回答,这对我有用。
//duplicate fields
var html = '';
$('.duplicate-fields').each(function() {
//put fields in a variable
if($(this).attr('data-fields') == 'all') {
$(this).parent('ul').find('li:not(li li)').each(function() {
html += '<li>' + $(this).html() + '</li>';
});
}
$(this).click(function() {
$(this).before(html);
})
});