html中的jquery克隆元素

Buz*_*uzz 3 jquery dom clone

在这里我使用jQuery ajax:

$.ajax({
    type: "GET",
    url: URL,
    data: { Mode: "POB1"},
    success: function (data) {
        var Html = $.trim($(data).find("#divpob").html());
        if (Html) {
            $(Html).find(".lblpob").text("UserName" + Username);
            $(".DivRprt").html(Html);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这里的价值lblpob没有得到改变,但如果我用.clone()这样的

if (Html) {
    var Html2 = $(Html).clone(true);
    $(Html2).find(".lblpob").text("UserName" + Username);
    Html = Html2;
    $(".DivRprt").html(Html);
}
Run Code Online (Sandbox Code Playgroud)

lblpob 变了.

.clone()这里有什么区别?

Ref*_*ann 7

临时DOM对象和html作为字符串存在问题.我会逐行分解:

你的第一个代码做了什么:

    var Html = $.trim($(data).find("#divpob").html());
Run Code Online (Sandbox Code Playgroud)

调用.html()$.trim()确保你的Htmlvar包含一个字符串,而不是一个实时DOM对象.

    $(Html) ...
Run Code Online (Sandbox Code Playgroud)

这会将Html字符串转换为新的 DOM对象(您不会将其分配给var),

    ... .find(".lblpob").text("UserName" + Username);
Run Code Online (Sandbox Code Playgroud)

并更改此未命名的DOM对象.不是你的Html字符串.

    $(".DivRprt").html(Html);
Run Code Online (Sandbox Code Playgroud)

但是在这里你使用原始Html字符串来改变html DivRprt.

你的其他代码做了什么:

    var Html2 = $(Html).clone(true);
Run Code Online (Sandbox Code Playgroud)

创建新的DOM对象并克隆它后,将其分配给Html2,

    $(Html2).find(".lblpob").text("UserName" + Username);
Run Code Online (Sandbox Code Playgroud)

在这里你操纵它.

    Html = Html2;
    $(".DivRprt").html(Html);
Run Code Online (Sandbox Code Playgroud)

所以在这里插入操纵的DOM对象 .DivRprt

我的选择:

你不需要.clone(),只需跟踪第一个DOM对象:

    if (Html) {
        var Html2 = $(Html)
        Html2.find(".lblpob").text("UserName" + Username);
        $(".DivRprt").html(Html2);
    }
Run Code Online (Sandbox Code Playgroud)

要么:

只是不要将修剪后的数据转换回字符串

    var Html = $(data).find("#divpob");
    if (Html.length) {
        Html.find(".lblpob").text("UserName" + Username);
        $(".DivRprt").html(Html);
    }
Run Code Online (Sandbox Code Playgroud)