Javascript DOM ChildNodes属性无法捕获所有子级

莫赛义德

我想保存一个DOM子树(div之下的所有东西都称为“框图”),然后将其绘制在一个名为“ bus_diagram”的div上。由于某些原因,保存childNodes属性似乎无法捕获所有元素。

这是我正在使用的javascript。在调用函数“ dostuff()”时,“ block_diagram”下的所有内容都应进入“ bus_diagram”

var SAVED_BLOCK_DOM = null;

function save_block() {
    SAVED_BLOCK_DOM = document.getElementById("block_diagram").childNodes;
}

function refresh_block() {
    for (var i = 0; i < SAVED_BLOCK_DOM.length; i++) {
        document.getElementById("bus_diagram").appendChild(SAVED_BLOCK_DOM[i]);
    }
}

function dostuff() {
    save_block();
    refresh_block();
}

这是一个JSFiddle:http : //jsfiddle.net/BFp5s/3/

jfriend00

.childNodes是节点的实时集合,当您开始在节点上执行.appendChild()(将元素移动到DOM中的其他位置)时,实时集合在迭代时会发生变化,从而导致节点丢失。因此,当for循环的索引为时0,您将对列表.appendChild()0th元素进行操作。这将从实时列表中删除该元素。然后,将索引增加到1,但是下一个要处理的项目现在位于0th列表中的位置,导致您要处理其他所有项目。

您可以将实时列表的副本复制到数组中(因此在迭代时不会更改),也可以更改迭代列表的方式。

例如,您可以更改save_block()为:

function save_block() {
    SAVED_BLOCK_DOM = Array.prototype.slice.call(document.getElementById("block_diagram").childNodes, 0);
}

这将SAVED_BLOCK_DOM形成一个普通数组,因此在迭代时不会更改。

jsFiddle演示:http : //jsfiddle.net/jfriend00/R8c94/


或者,如果您希望/需要支持IE6 / 7/8支持,而上述复制机制无法使用该支持,则可以手动复制nodeList:

function save_block() {
    SAVED_BLOCK_DOM = [];
    var list = document.getElementById("block_diagram").childNodes;
    for (var i = 0; i < list.length; i++) {
        SAVED_BLOCK_DOM.push(list[i]);
    }
}

如果您不需要SAVED_BLOCK_DOM继续保留节点列表并希望支持IE8,则可以更改迭代方式,如下所示:

function refresh_block() {
    while (SAVED_BLOCK_DOM.length) {
        document.getElementById("bus_diagram").appendChild(SAVED_BLOCK_DOM[0]);
    }
}

jsFiddle演示:http : //jsfiddle.net/jfriend00/PK7Tg/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript DOM ChildNodes属性无法捕获所有子级

来自分类Dev

JavaScript中的DOM“禁用”属性

来自分类Dev

没有JavaScript的DOM操作

来自分类Dev

捕获通过dom操作加载的Javascript子文件中的错误

来自分类Dev

捕获通过dom操作加载的Javascript子文件中的错误

来自分类Dev

在javascript中获取xml dom子元素

来自分类Dev

JavaScript使用DOM方法和属性

来自分类Dev

使用JavaScript修改DOM元素属性

来自分类Dev

无法更改DOM JavaScript中的图像源

来自分类Dev

dom更新后,javascript无法正常运行

来自分类Dev

使用JavaScript地图后无法遍历dom?

来自分类Dev

无法在JavaScript中为创建的DOM元素设置ID属性

来自分类Dev

Javascript DOM ChildNodes property doesn't capture all children

来自分类Dev

当所有 DOM 激活时,javascript 中什么是合适的事件?

来自分类Dev

寻找所有 Javascript(BOM、DOM、内置)对象的官方文档

来自分类Dev

如何使用 DOM 可用的所有输出遍历 JavaScript for 循环

来自分类Dev

javascript从各个层面获取dom元素子级

来自分类Dev

使用子级JavaScript / jQuery在DOM元素中交换文本

来自分类Dev

旧版JavaScript DOM与现代javascript DOM与jquery DOM

来自分类Dev

从PHP插入DOM的动态变量。无法将该变量从DOM传递到Javascript

来自分类Dev

javascript对象与DOM对象

来自分类Dev

html dom和javascript

来自分类Dev

在JavaScript中遍历DOM

来自分类Dev

Javascript,Jquery,DOM

来自分类Dev

关于JavaScript和DOM

来自分类Dev

从dom的JavaScript removeChild输入

来自分类Dev

JavaScript DOM表操作

来自分类Dev

javascript对象与DOM对象

来自分类Dev

JavaScript DOM遍历顺序