Не удалось выполнить ‘insertBefore’ в ‘Node’: node, перед которым должен быть вставлен новый node, не является дочерним элементом этого node

Вопрос:Я пытаюсь вставить комментарий node перед конкретным node () в моем xml. Вот для этого метод: function test(xmlResponse) { var parser = new DOMParser(), xmlDoc = parser.parseFromString(xmlResponse,"text/xml"); var comentDocument = document.createComment("My personal comments"); console.log(xmlDoc.querySelectorAll("street name")[0]) xmlDoc.insertBefore( comentDocument , xmlDoc.querySelectorAll("street name")[0]); return xmlDoc } и когда я звоню: test("Street name") Я получаю: Street name Uncaught DOMException:

Вопрос:

Я пытаюсь вставить комментарий node перед конкретным node (<name>) в моем xml. Вот для этого метод:

function test(xmlResponse) { var parser = new DOMParser(), xmlDoc = parser.parseFromString(xmlResponse,»text/xml»); var comentDocument = document.createComment(«My personal comments»); console.log(xmlDoc.querySelectorAll(«street name»)[0]) xmlDoc.insertBefore( comentDocument , xmlDoc.querySelectorAll(«street name»)[0]); return xmlDoc }

и когда я звоню:

test(«<address><street><name>Street name</name></street></address>»)

Я получаю:

<name>Street name</name> Uncaught DOMException: Failed to execute ‘insertBefore’ on ‘Node’: The node before which the new node is to be inserted is not a child of this node. at Error (native) at generateTheComment (<anonymous>:12:9) at <anonymous>:2:1 at Object.InjectedScript._evaluateOn (<anonymous>:895:140) at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34) at Object.InjectedScript.evaluate (<anonymous>:694:21)

Как вы видите, <name>Street name</name> печатается правильно; поскольку я хочу добавить comentDocument к его родительскому элементу <street>.

Не уверен, где я делаю ошибку здесь.

Я ожидаю, что код вернется назад:

<address> <street> <!— My personal comments —> <name>Street name </name> </street> </address> Ответ №1xmlDoc.insertBefore( comentDocument , xmlDoc.querySelectorAll(«street name»)[0]);

Это попытка вставить непосредственно из документа. Вам нужно перейти к прямому родительскому элементу элемента, в который вы хотите вставить комментарий раньше:

var name = xmlDoc.querySelector(«street name»); name.parentNode.insertBefore(comentDocument, name);

Оцените статью
Добавить комментарий