我正在使用带有骨干和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
有什么建议吗?
答案 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])