【问题标题】:jQuery wont append a clone on page loadjQuery 不会在页面加载时附加克隆
【发布时间】:2014-04-06 02:57:17
【问题描述】:

如果您单击选项 2,它会从页面加载中附加原始克隆,但不会在每次单击按钮时重复。

<a href="#" class="modify">1. Turn the element red...</a><br />
<a href="#" class="copy">2. Append the original black element...</a><br /><br />
<div id="container">
    <div class="element">This is an element!</div>
</div>
$(document).ready(function () {
    var obj = $(".element").clone(true);
    $(".copy").click(function (e) {
        e.preventDefault();
        //alert(obj); //Just to see if it still exists.
        $("#container").append(obj);
    });
    $(".modify").click(function (e) {
        e.preventDefault();
        $(".element").css("color", "#F00");
    });
});

这是我的 CodePen 链接http://codepen.io/anon/pen/dsvLm

有什么想法吗?

【问题讨论】:

    标签: javascript jquery append clone


    【解决方案1】:

    您可能不知道的单个 DOM 元素的一个特性是它只能有一个父元素。这是有道理的,因为 DOM 树将元素向上、向下和横向连接起来,并且只有一个父元素链接(以及一个 next 和一个 prev 同级元素链接),但有一个包含多个子元素的列表。

    当你克隆一个元素时,你创建了一个新的 DOM 元素,它实际上是 DOM 树中的一个新分支(如果只是一个小分支)。调用 append 会将元素添加到其新父级,但它也会将克隆的父级链接指向其新父级。通过一遍又一遍地添加相同的元素,您只是更改了单个元素的父元素(即在 DOM 树中移动它)。

    每次需要时,只需对断开连接的克隆对象(处于其原始状态)进行新克隆:

    JSFiddle:http://jsfiddle.net/TrueBlueAussie/7h8MK/2/

    $("#container").append(obj.clone(true));
    

    【讨论】:

    • 啊!这正是我正在寻找的。谢谢你。我没想到要克隆克隆。
    【解决方案2】:

    您需要在追加时创建克隆。使用:

    var obj = $(".element");
    $(".copy").click(function (e) {
        e.preventDefault();
        //alert(obj); //Just to see if it still exists.
        $("#container").append(obj.clone(true));
    });
    

    Demo

    【讨论】:

    • 我想要原始元素而不是克隆的红色元素。它似乎可以正常工作一次,但之后就失败了。
    • @Milind Anantwar:这不起作用的原因是因为您删除了元素的初始clone(),这将保存对象的初始状态。相反,它引用了实时的第一个元素(包括任何颜色变化)。
    猜你喜欢
    • 2014-04-06
    • 1970-01-01
    • 2017-01-12
    • 2013-06-18
    • 2019-04-20
    • 1970-01-01
    • 2016-06-10
    • 2016-12-30
    • 2018-03-23
    相关资源
    最近更新 更多