Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 克隆DOM元素后丢失对它们的引用_Javascript_Mootools - Fatal编程技术网

Javascript 克隆DOM元素后丢失对它们的引用

Javascript 克隆DOM元素后丢失对它们的引用,javascript,mootools,Javascript,Mootools,使用MooTools,我在DOM就绪时将一些DOM元素缓存在变量中,如下所示: var mc = $('main-content'), bg = $('bg'), arrows = $$('arrows'); bg和箭头都位于mcDOM元素中。我想克隆mc节点,对其执行一些操作,然后将克隆插入DOM: function updateDOM (parent) { var parentID = parent.id, oldNode = document.ge

使用MooTools,我在DOM就绪时将一些DOM元素缓存在变量中,如下所示:

var mc = $('main-content'),
    bg = $('bg'),
    arrows = $$('arrows');
bg
箭头都位于
mc
DOM元素中。我想克隆
mc
节点,对其执行一些操作,然后将克隆插入DOM:

function updateDOM (parent) {
    var parentID = parent.id,
        oldNode = document.getElementById(parentID),
        clone = oldNode.cloneNode(true);

    // work with clone

    oldNode.parentNode.replaceChild(clone, oldNode);

}
当我运行
updateDOM(mc)
时,我发现任何会更改
mc
bg
箭头的后续函数都不起作用。当我对元素执行console.log()操作时,它们会显示出来,但不会反映自初始化以来所做的任何更改


考虑到我正在克隆元素,因此,
mc
不再引用
div#main content
对我来说是有意义的
updateDOM()
是一个可由任何元素使用的函数。我真的需要硬编码一种方法来重新实例化我缓存的每个变量吗?还是有一种更动态的方法来实现这一点?

更改
updateDOM
以返回新的克隆节点,只需更改对
updateDOM
的调用即可重新分配变量

mc = updateDOM(mc);
也许我很笨,但在我看来,上面的函数传递了一个元素引用,该元素引用被分配给父元素。然后它使用
getElementById(parent.id)
获取对同一元素的引用,然后克隆它。这与:

function updateDOM (parent) {
    var clone = parent.cloneNode(true);

您的缓存代码看起来不正确。。。你是想把
#
放在选择器前面吗?还是这不是jQuery?@Jacob:不是;确切地说,它看起来像原型(
$
)MooTools,我已经添加到问题中。对不起,有什么困惑。其他缓存的元素呢,比如驻留在mc元素中的bg和arrows?因为当使用updateDOM时它们驻留在mc中,所以我也失去了对它们的引用。我没注意到那条皱纹。除了直接修改您的元素而不是克隆和替换之外,我看不到任何更容易或更有效的方法来重新选择元素。当我使用函数时,我注意到您描述的方法存在问题。使用document.getElementById似乎在其他方法不起作用的情况下起作用。当时我没有仔细研究,所以说不出原因。
function updateDOM (parent) {
    var clone = parent.cloneNode(true);