Вопрос:
Я пытаюсь вставить комментарий 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);