Javascript 克隆DOM元素后丢失对它们的引用
使用MooTools,我在DOM就绪时将一些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
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);