【问题标题】:Is it possible to clone html element objects in JavaScript?是否可以在 JavaScript 中克隆 html 元素对象?
【发布时间】:2010-10-29 14:36:27
【问题描述】:

我在表格中有一个 html 元素(如选择框输入字段)。现在我想复制对象并从副本中生成一个新对象,并使用 JavaScript 或 jQuery。我认为这应该以某种方式起作用,但我现在有点无能为力。

类似这样的东西(伪代码):

oldDdl = $("#ddl_1").get(); 

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

【问题讨论】:

标签: javascript jquery


【解决方案1】:

使用您的代码,您可以使用 cloneNode() 方法在纯 JavaScript 中执行类似的操作:

// Create a clone of element with id ddl_1:
let clone = document.querySelector('#ddl_1').cloneNode( true );

// Change the id attribute of the newly created element:
clone.setAttribute( 'id', newId );

// Append the newly created element on element p 
document.querySelector('p').appendChild( clone );

或者使用jQuery clone() 方法(不是最有效的):

$('#ddl_1').clone().attr('id', newId).appendTo('p'); // append to where you want

【讨论】:

  • 克隆元素时修改ID非常重要。
【解决方案2】:

在 jQuery 中其实很简单:

$("#ddl_1").clone().attr("id",newId).appendTo("body");

当然要更改 .appendTo()...

【讨论】:

    【解决方案3】:

    一行:

    $('#selector').clone().attr('id','newid').appendTo('#newPlace');
    

    【讨论】:

    • 我认为这不会有帮助,因为您的属性值是一个不会改变的字符串。
    【解决方案4】:

    使用原生 JavaScript:

    newelement = element.cloneNode(bool)
    

    布尔值表示是否克隆子节点。

    Here is the complete documentation on MDN.

    【讨论】:

    • 最佳答案。不要在不需要的地方使用 jquery。
    • 看起来不错……但截至目前,浏览器兼容性值得怀疑。
    • @AniketSuryavanshi 我不确定具体是 2 月 4 日,但compatibility looks perfect today
    • ID 和名称将重复。 ID 需要更改,如果需要重复名称,名称可以保持原样。
    • 可惜你失去了所有属性:/
    【解决方案5】:

    是的,您可以复制一个元素的子元素并将它们粘贴到另一个元素中:

    var foo1 = jQuery('#foo1');
    var foo2 = jQuery('#foo2');
    
    foo1.html(foo2.children().clone());
    

    证明:http://jsfiddle.net/de9kc/

    【讨论】:

    • 重复 ID 将成为您的方法的问题
    【解决方案6】:

    试试这个:

    $('#foo1').html($('#foo2').children().clone());
    

    【讨论】:

      【解决方案7】:

      您需要选择“#foo2”作为选择器。然后,用 html() 获取它。

      这里是html:

      <div id="foo1">
      
      </div>
      <div id="foo2">
          <div>Foo Here</div>
      </div>​
      

      这里是javascript:

      $("#foo2").click(function() {
          //alert("clicked");
          var value=$(this).html();
          $("#foo1").html(value);
      });​
      

      这里是 jsfiddle:http://jsfiddle.net/fritzdenim/DhCjf/

      【讨论】:

        【解决方案8】:

        您可以使用 clone() 方法来创建副本..

        $('#foo1').html( $('#foo2 > div').clone())​;
        

        FIDDLE HERE

        【讨论】:

          【解决方案9】:

          使用.innerHTML获取要克隆的元素的HTML,然后通过createElement()创建一个新对象...

          var html = document.getElementById('test').innerHTML;
          var clone = document.createElement('span');
          clone.innerHTML = html;
          

          一般来说,clone() 函数必须由克隆器编写或理解。例如,让我们克隆这个:&lt;div&gt;Hello, &lt;span&gt;name!&lt;/span&gt;&lt;/div&gt;。如果我删除克隆的&lt;span&gt; 标签,它是否也应该删除原始的跨度标签?如果两者都被删除,则对象引用被克隆;如果只删除一组,则对象引用是全新的实例化。在某些情况下,您需要一个,而在其他情况下,您需要另一个。

          通常,在 HTML 中,您会希望克隆的任何内容在引用上都是独立的。确保正确包含这些新引用的最佳方法是让浏览器在新元素中重新运行和重新理解相同的 innerHTML。比努力解决你的问题更好,你应该确切地知道它是如何进行克隆的......

          完整的工作演示:

          function cloneElement() {
              var html = document.getElementById('test').innerHTML;
              var clone = document.createElement('span');
              clone.innerHTML = html;
              document.getElementById('clones').appendChild(clone);
          }
          <span id="test">Hello!!!</span><br><br>
          
          <span id="clones"></span><br><br>
          
          <input type="button" onclick="cloneElement();" value="Click Here to Clone an Element">

          【讨论】:

            【解决方案10】:

            Vanilla JS 方法来处理你想要做的事情

            const oldDdl = document.querySelector('#ddl_1');
            
            const newDdl = oldDdl.cloneNode(true);
            
            oldDdl.setAttribute('id','newId');
            
            const oldDdlHtml = oldDdl.innerHTML;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-12-26
              • 2011-07-18
              • 2016-07-22
              • 1970-01-01
              • 1970-01-01
              • 2013-01-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多