2015-06-18 75 views
5

Sto tentando di inserire un nodo commento prima del nodo particolare (<name>) nel mio xml. Ecco il metodo per esso:Impossibile eseguire 'insertBefore' su 'Node': il nodo prima del quale il nuovo nodo deve essere inserito non è figlio di questo nodo

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 
} 

e quando io chiamo:

test("<address><street><name>Street name</name></street></address>") 

ottengo:

<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) 

Come si può vedere la <name>Street name</name> sta ottenendo stampato correttamente; come voglio aggiungere il comentDocument al suo genitore <street>.

Non so dove sto sbagliando qui.

mi aspetto il codice per tornare indietro:

<address> 
    <street> 
    <!-- My personal comments --> 
    <name>Street name 
    </name> 
    </street> 
</address> 
+1

Beh, sembra che non si desidera inserire che commentare nel 'xmlDoc', ma in quel '' nodo. – Bergi

+0

correlati: http://stackoverflow.com/questions/3352871/using-javascript-insertbefore-to-insert-before-a-textnode –

risposta

3
xmlDoc.insertBefore(comentDocument , xmlDoc.querySelectorAll("street name")[0]); 

Questo cerca di inserire direttamente dal documento. È necessario arrivare al controllante diretta dell'elemento che si desidera inserire il tuo commento prima:

var name = xmlDoc.querySelector("street name"); 
name.parentNode.insertBefore(comentDocument, name); 
Problemi correlati