J'ai écrit une fonction simple pour copier le contenu (y compris tous les noeuds enfants) d'un noeud à un autre d'un objet DOM XML. Étonnamment dans la fonction, la boucle for n'écrit pas pour n = 1 pour une raison quelconque je ne peux pas comprendre, s'il vous plaît aider, j'ai essayé de déboguer de toutes les manières possibles à partir de 4 jours.Copie d'un noeud XML DOM vers un autre en JavaScript
Cette fonction n'est pas une itération pour n = 1 (il est itérer pour n = 0 et n = 2 et ainsi de suite, sauf n = 1):
function copyNode(fromNode, toNode) {
for (var n=0; n [lessthan] fromNode.childNodes.length; n++) {
var fromChild = fromNode.childNodes[n];
var toChild = toNode.appendChild(fromChild);
copyNode(fromChild, toChild);
}
}
code complet:
<html>
<head>
<script type="text/javascript">
//STANDARD TEXT to XMLDOM OBJECT RETURN FUNCTION
function getXmlDoc(text){
var xmldoc = null;
try //Internet Explorer
{
xmldoc=new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async="false";
xmldoc.loadXML(text);
return xmldoc;
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
parser=new DOMParser();
xmldoc=parser.parseFromString(text,"text/xml");
return xmldoc;
}
catch(e)
{
alert(e.message);
return;
}
}
}
//END OF getXmlDoc
//Function that refuses to work, the 2nd child is always being skipped, i.e n=1 is never running :(, ONLY n=1 is not running
function copyNode(fromNode, toNode) {
for (var n=0; n [lessthan] fromNode.childNodes.length; n++) {
var fromChild = fromNode.childNodes[n];
var toChild = toNode.appendChild(fromChild);
copyNode(fromChild, toChild);
}
}
//Function to clear a node's contents
function clearNode(node2)
{
x2=node2.childNodes;
if(x2.length!=0)
{
for(i=0;i [lessthan] x2.length;i++)
{
node2.removeChild(x2[i]);
}
}
}
//XML1
text="<book>";
text=text+"<title>Everyday Italian</title>";
text=text+"<author>Giada De Laurentiis</author>";
text=text+"<year>2005</year>";
text=text+"</book>";
xmlDoc=getXmlDoc(text);
//XML2
text2="<book>";
text2=text2+"<title><a>1</a><b>2</b><c><ca>3</ca></c></title>";
text2=text2+"<year>2006</year>";
text2=text2+"</book>";
xmlDoc2=getXmlDoc(text2);
x=xmlDoc.documentElement.childNodes;
y=xmlDoc2.documentElement.childNodes;
var string = (new XMLSerializer()).serializeToString(y[0]);
alert(string);
var string = (new XMLSerializer()).serializeToString(x[0]);
alert(string);
clearNode(x[0]);
copyNode(y[0],x[0]);
var string = (new XMLSerializer()).serializeToString(xmlDoc);
alert(string);
</script>
</head>
<body>
</body>
</html>
merci, monsieur, vous m'avez sauvé des dommages au cerveau. Je pensais que c'était copier le nœud et ne pas le déplacer car aucune des fonctions ne spécifie explicitement le mot déplacer/copier. et j'étais toujours en train de déboguer pour vérifier le nœud résultant et ne jamais vérifier ce qui arrivait au nœud source. ty encore une fois – smhx