PHP DOMNode insertBefore(无修改允许错误)

时间:2011-01-28 22:00:01

标签: php dom clonenode

我注意到当尝试调用DOMNode的insertBefore方法时,要插入的节点来自另一个文档(即不同于插入的参考节点节点), PHP运行时生成一个DOMException,其中消息是“No Modification Allowed Error”。

文档似乎在这个问题上很少见,尽管我确实看到一些提到插入的节点是只读

我发现的解决方法是克隆来自不同文档的节点并插入克隆。例如:

foreach($nodeChildren as $child) {
    $clone = $child->cloneNode(true);
    $parentNode->insertBefore($clone, $nodeToInsertInFrontOf);
}

我的问题有两个:

1)为什么我必须克隆此节点才能执行插入?

2)这是执行此操作的最有效方式(假设克隆的子节点可能包含多个子节点以及孙子级深层的几个级别)?

1 个答案:

答案 0 :(得分:1)

根据定义,DOM中的对象只知道其自身文档中的对象。这是安全的事情。