克隆javascript对象维护id

时间:2013-11-06 15:38:02

标签: javascript jquery

我正在尝试将对象克隆到JQuery对话框 我成功地使用append将对象移动到目标区域,但是这也删除了我的原始对象。这些对象还具有在悬停和点击时设置其样式的功能。该函数使用对象的id来设置样式,因此在这种情况下,克隆对象的id必须与原始对象的id重复。

这样就可以移动原始对象,但不会克隆原始对象:

var lv_Parts = document.getElementById("DefaultPart");  // An area where my original 'parts' are
var lv_PartArea = $('<div class="PartWnd"/>');          // The new are for the parts, which is located in a JQuery dialog
lv_PartArea.html(lv_Parts.childNodes);                  // Adding the childNodes of the original partarea, which are parts
lv_CalcWindow.append(lv_PartArea);                      // Adding the parts to the new part area in the JQuery dialog

我尝试克隆它们但它不起作用:

var lv_Parts = $('DefaultPart');
var lv_PartArea = $('<div class="PartWnd"/>');
lv_PartArea.append(lv_Parts.children().contents().clone());
lv_CalcWindow.append(lv_PartArea);

我怎样才能做到这一点?

修改
这些是setStyle函数,我还将lv_obj更改为类名。它现在使用“Part”类点亮所有对象。

function Part_setStyle(pm_col, pm_id) {
    var lv_obj;
    if (!pm_id) {
        lv_obj = ".Part";
    } else {
        lv_obj = pm_id;
    }
    $(lv_obj).css("background-color", pm_col);
}

function Part_onHoverIn(pm_this, pm_event) {
    this.setStyle("rgb(135, 206, 250)");
}

function Part_onHoverOut(pm_this, pm_event) {
    if (this.Selected == false) {
        this.setStyle("rgb(220, 197, 220)");
    }
}

1 个答案:

答案 0 :(得分:1)

按类选择对象: 相反,此$('<div class="PartWnd"/>')使用此$(".PartWnd")

按ID选择对象: 相反,此$('DefaultPart')使用此$('#DefaultPart')

您的代码应如何:

var lv_Parts = $('#DefaultPart');
var lv_PartArea = $('.PartWnd');
lv_PartArea.append(lv_Parts.children().contents().clone());
lv_CalcWindow.append(lv_PartArea);

首先,具有相同id的对象是错误的,请改用class。 Ids必须是唯一的,因为javascript和浏览器可能会遇到具有相同ID的对象的问题,所以请记住这一点。如果你的代码有效,我不知道,我不知道例如lv_CalcWindow是什么,但这里有一个关于克隆的小例子:

克隆div:

 $("#div1").append($("#div2").clone());

克隆div并更改id以避免重复的ID:

 $("#div1").append($("#div2").clone().attr('id', 'div3'));