克隆表单元素,然后将它们包装在 div 中,然后追加?
Clone form elements, then wrap them in a div, then append?
我正在从一个表单中获取所有输入并将它们克隆到另一个表单中。这很好用(修复了 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
这应该有效:
$('form#Receiver').append($('<div class="appended">')
.append($(this).find('div.name') .clone())
.append($(this).find(':input').not(':button') .clone())
.append('<button>delete</button>')
);
要存储克隆的元素,您可以将它们放入数组中,例如:
var inputs = [];
$('input').each(function() {
inputs.push($(this).clone());
});
要将它们包装在一个新元素中,您应该能够按照以下方式做一些事情:
// create the wrapper and append the cloned elements
var container = $('<div class="appended" />').append(namediv, inputs);
// append the wrapper
$('form#Receiver').append(container);
我正在从一个表单中获取所有输入并将它们克隆到另一个表单中。这很好用(修复了 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
这应该有效:
$('form#Receiver').append($('<div class="appended">')
.append($(this).find('div.name') .clone())
.append($(this).find(':input').not(':button') .clone())
.append('<button>delete</button>')
);
要存储克隆的元素,您可以将它们放入数组中,例如:
var inputs = [];
$('input').each(function() {
inputs.push($(this).clone());
});
要将它们包装在一个新元素中,您应该能够按照以下方式做一些事情:
// create the wrapper and append the cloned elements
var container = $('<div class="appended" />').append(namediv, inputs);
// append the wrapper
$('form#Receiver').append(container);