0

我正在尝试将对象克隆到 JQuery 对话框。
通过使用,我成功地将对象移动到它们的目标区域,append但这也删除了我的原始对象。这些对象还具有在悬停和单击时设置其样式的功能。该函数使用对象的 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)");
    }
}
4

1 回答 1

1

按类选择对象:改为$('<div class="PartWnd"/>')使用 this$(".PartWnd")

通过 id 选择对象:改为$('DefaultPart')使用 this$('#DefaultPart')

您的代码应该如何:

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

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

克隆一个 div:

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

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

 $("#div1").append($("#div2").clone().attr('id', 'div3'));
于 2013-11-06T15:59:25.967 回答