【发布时间】:2016-12-29 16:04:53
【问题描述】:
我从一个表单中获取所有输入并将它们克隆到另一个表单中。这很好用(通过 jquery.fix.clone.js 的修复)。我现在只是试图将元素包装到一个 div 中,这不起作用,因为 jquery 总是添加标签的另一半,比如<div></div>
addbutt = $("form.prodform button.add");
addbutt.click(function(e){
e.preventDefault();
theform = $(this).closest('form');
$(theform).each(function(){
//lets validate,then we add
$('form#Receiver').append('<div class="appended">');
$('form#Receiver').append($(this).find('div.name') .clone());
$('form#Receiver').append($(this).find(':input').not(':button') .clone());
$('form#Receiver').append('<button>delete</button>');
$('form#Receiver').append('</div>');
});
})
我尝试使用 html() 来获取找到的输入,但这只是获取输入,而不是值。 尝试这样:
inputs = $(this).find(':input').not(':button');
$.each(inputs, function(i, val){
inouts = inouts + $(val).prop('outerHTML');
});
还尝试了$('form#Receiver').append($(this).find('.name') .clone().html())的许多变体
所以,我知道我需要做的是找到我的输入并将它们克隆到我的包装器 div 中。如何存储克隆的元素,将它们放在一个 div 中,例如:
$('form#Receiver').append('<div class="appended">' + namediv + inputs + '</div>');
这是工作结果,感谢@Derek Story
addbutt = $("form.prodform button.add");
addbutt.click(function(e){
var inputs = [];
var divs = [];
var theform = $(this).closest('form');
e.preventDefault();
theform.find(':input').not(':button').each(function() {//using :intput cuz it might be selects, etc.
inputs.push($(this).clone());
});
theform.find('div.name').each(function() {
divs.push($(this).clone());
});
var container = $('<div class="appended" />').append(divs, inputs);
$('form#Receiver').append(container);
})
让我补充一下,为了让 clone() 处理选择和文本区域,你需要这个 https://github.com/spencertipping/jquery.fix.clone
【问题讨论】: