PHP DOMNode insertBefore (не допускается ошибка модификации) - PullRequest
0 голосов
/ 29 января 2011

Я заметил, что при попытке вызвать метод insertBefore в DOMNode, где вставляемый узел взят из другого документа (т. Е. Отличается от ссылочного узла и , вставляемого в него), PHPво время выполнения генерируется исключение DOMException, в котором появляется сообщение «Ошибка не допускается модификацией».

Документация, по-видимому, разбросана по этой проблеме, хотя я видел упоминание о том, что в нее вставляется узел только для чтения .

Обходное решение, которое я нашел, - это клонирование узла из другого документа и вставка клона.Пример:

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

У меня двоякий вопрос:

1) Почему я должен клонировать этот узел, чтобы выполнить вставку?

2) Этонаиболее эффективный способ выполнения этого действия (при условии, что клонированный дочерний узел может содержать несколько дочерних элементов и несколько уровней иерархии внуков)?

1 Ответ

1 голос
/ 29 января 2011

По определению, объекты внутри DOM знают только объекты внутри своего собственного документа. Это вещь безопасности.

...