如何克隆具有许多其他标签的标签?

时间:2016-11-21 03:25:00

标签: javascript jquery html

我有一个名为' myForm'的表单。我想添加一个div标签已经定义了'原始',每次按下按钮。 任何人都可以帮我添加标签吗? 附加标签必须在原始标签之后,但仍在myForm内部。

我应该使用clone()函数吗? Plz有人让我知道....这是我的代码......

<form name="myForm">
<div id="original" class="original">
    <div class="separator-2"></div>
    <div>
    <div class="form-group" >
        <input type="text" class="form-control" name="AAA" style="width:400px"/>
    </div>
    <div class="form-group">
        <input type="text" class="form-control" name="BBB" style="width:400px">
    </div>
    </div><br>
</div>
</form>

<button id="myButton"/>

<script>
var form = document.getElementById('myForm');
document.getElementById('myButton').addEventListener('click', function(e) {
    form.appendChild(addAdditionalTags());
});

function addAdditionalTags() {
    //?????????? What should I write here???
}
</script>

1 个答案:

答案 0 :(得分:1)

您必须使用Node.cloneNode()克隆节点,然后使用Node.appendChild()将其添加到文档中。

  

警告:cloneNode()可能会导致文档中的元素ID重复。

如果您的元素使用了ID,则应始终将其更改为唯一ID,因此您必须使用name属性才能在提交时将其发布到表单的post / get数据中。< / p>

  

克隆节点会复制其所有属性及其值,   包括内在(内联)听众。它不会复制事件   使用addEventListener()或分配给元素的侦听器添加的侦听器   属性。 (例如node.onclick = fn)此外,对于一个元素,   彩绘的图像不会被复制。

对于您的示例,您可以执行以下操作,将<div id="original-1" class="original">克隆并插入到文档表单中,并使用唯一的ID和输入名称,如下所示:

document.getElementById('cloneElement').addEventListener('click', function(e) {
    var form = document.getElementById('myForm');
    var formOriginals = form.getElementsByClassName('original');
    var cloned = formOriginals[0].cloneNode(true);
    var new_index = formOriginals.length + 1;
    cloned.id = 'original-' + new_index;
    cloned.getElementsByTagName('input')[0].name = 'field-' + new_index + 'a';
    cloned.getElementsByTagName('input')[1].name = 'field-' + new_index + 'b';
    form.appendChild(cloned);
});
<form name="myForm" id="myForm">
  <div id="original-1" class="original">
    <div class="separator"></div>
    <div class="groups">
      <div class="form-group" >
        <input type="text" class="form-control" name="field-1a" style="width:400px"/>
      </div>
      <div class="form-group">
        <input type="text" class="form-control" name="field-1b" style="width:400px">
      </div>
    </div><br>
  </div>
</form>

<button id="cloneElement">Clone Form Element</button>

这样会产生这样的html dom树,每次点击克隆按钮时都会克隆<div id="original-1" class="original">元素:

<form name="myForm" id="myForm">
    <div id="original-1" class="original">
        <div class="separator"></div>
        <div class="groups">
            <div class="form-group">
                <input type="text" class="form-control" name="field-1a" style="width:400px">
            </div>
            <div class="form-group">
                <input type="text" class="form-control" name="field-1b" style="width:400px">
            </div>
        </div><br>
    </div>
    <div id="original-2" class="original">
        <div class="separator"></div>
        <div class="groups">
            <div class="form-group">
                <input type="text" class="form-control" name="field-2a" style="width:400px">
            </div>
            <div class="form-group">
                <input type="text" class="form-control" name="field-2b" style="width:400px">
            </div>
        </div><br>
    </div>
</form>