克隆表单元素,然后将它们包装在 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);

Codepen example