XML DOMオブジェクトのあるノードから別のノードにコンテンツ(すべての子ノードを含む)をコピーする簡単な関数を書きました。1つのDOM XMLノードを別のノードにコピーする
驚いたことに、forループは、何らかの理由でn = 1で繰り返されていません。私は理解できません。私は4日間から可能な限りすべてデバッグしようとしています。
この関数は(すなわち、n = 0のための反復であり、n = 2など以外のn = 1'S)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);
}
}
フルコード:
<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>
ありがとうございました、脳の損傷から私を救った。私はノードをコピーしていて、移動しないと思っていました。機能のどれも明示的にmove/copyという単語を指定していないからです。結果のノードをチェックし、ソースノードに何が起きているのかを決してチェックしないように常にデバッグしていました。もう一度 – smhx