我注意到当尝试调用DOMNode的insertBefore方法时,要插入的节点来自另一个文档(即不同于插入的参考节点和节点), PHP运行时生成一个DOMException,其中消息是“No Modification Allowed Error”。
文档似乎在这个问题上很少见,尽管我确实看到一些提到插入的节点是只读。
我发现的解决方法是克隆来自不同文档的节点并插入克隆。例如:
foreach($nodeChildren as $child) {
$clone = $child->cloneNode(true);
$parentNode->insertBefore($clone, $nodeToInsertInFrontOf);
}
我的问题有两个:
1)为什么我必须克隆此节点才能执行插入?
2)这是执行此操作的最有效方式(假设克隆的子节点可能包含多个子节点以及孙子级深层的几个级别)?
答案 0 :(得分:1)
根据定义,DOM中的对象只知道其自身文档中的对象。这是安全的事情。