需要帮助避免HIERARCHY_REQUEST_ERR:DOM异常3错误

时间:2011-07-25 17:22:34

标签: javascript xml backbone.js

我正在使用带有骨干和adobe air的javascript。在我的视图模型中,我有一个解析函数,它保存响应(Dom对象),稍后,当用户点击保存时,我想为保存的响应添加几个节点,但我得到Dom例外3,任何救命?以下是一些供参考的代码。

parse: function(resp, xhr){
       this.treeDoc = xhr.responseXML
       //parse routine
      }

在某个地方,用户想要保存

var xmlTree = createMyXML(); //creates a sub xml tree
this.treeDoc.appendChild(xmlTree ); //DOM Error 3 thrown

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可能必须先调用adoptNode:

this.treeDoc.adoptNode(newElements);

然后附加到子节点,如:

this.treeDoc.documentElement.firstChild.appendChild(newElements);

此外,如果newElements是一个新元素数组(如名称所示),则需要迭代它。

有关详细信息,请参阅https://developer.mozilla.org/en/DOM/document

你的评论的答案(很大程度上是一个评论):

即使我没有重现错误,我想我知道你为什么会这样做。错误8是NOT_FOUND_ERR的代码。猜测你保存childNodes.length的值并从0(零)迭代到这个值,这里发生的是每次添加或删除子项时更新childNodes数组,然后在某些点上在你的循环中i实际上大于childNodes.length(但不大于保存的值)导致childNodes[i]返回undefined。并且因为undefined不是引用节点的子节点,所以NOT_FOUND_ERR(代码8)是throw。为避免这种情况,只需对代码进行微小更改,只需将childNodes.length-1的初始值迭代为0(零),或者只执行:

while(node.childNodes.length > 0) node.removeChild(node.childNodes[0])