我正在使用带有 backbone 和 adobe air 的 javascript。在我的 View 模型中,我有一个解析函数,它保存响应(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
有什么建议吗?
最佳答案
您可能必须先调用 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(零)迭代到这个值,这里发生的是每次添加 child 时更新 childNodes
数组或删除,然后在循环中的某个点 i
实际上大于 childNodes.length
(但不大于保存的值)导致 childNodes[i]
返回 undefined
。并且由于 undefined
不是引用节点的子节点,因此抛出 NOT_FOUND_ERR(代码 8)。为了避免这种情况,只需对代码进行微小更改,只需将 childNodes.length-1
的初始值迭代为 0(零),或者只需执行以下操作:
while(node.childNodes.length > 0) node.removeChild(node.childNodes[0])
关于javascript - 需要帮助避免 HIERARCHY_REQUEST_ERR : DOM Exception 3 error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819930/