cloneNode()メソッド
・(書式)コピーされたNodeオブジェクト=コピー元Nodeオブジェクト.cloneNode(boolean値)
・引数boolean値
"true"・・・全ての子孫ノードも含めコピーする
"false"・・・指定したノードとその属性だけをコピーする(内容となるテキストノードなどはコピーされない)
・コピーされたノードは親や兄弟を持たない(nullになる)。即ちDOMツリーに接続されていない状態のノードになる。
・コピーされたノードはappendChild()やinsertBefore()などで文書に追加されるまでXML文書の一部ではない。
[サンプルXML文書を表示](下のフレームに)
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<root>
<title>ノードのコピー:cloneNode()メソッド</title>
<data>
<city code="003">大阪市<区>浪速区</区><町>日本橋</町></city>
<city code="005">大阪市<区>中央区</区><町>道頓堀</町></city>
</data>
</root>
HTMLソース
<SCRIPT language="JavaScript"><!--
function Test(){
var xmlobj=new ActiveXObject("MSXML2.DOMDocument");
xmlobj.async=false;
xmlobj.load("clonenode01.xml");
sp1.innerHTML = ViewData(xmlobj);
var Source = xmlobj.selectSingleNode("//city[0]");
alert("コピー元のノードは\n\n"+Source.xml);
//true設定でコピーし、末尾に追加
var Clone = Source.cloneNode(true);
alert("true設定でコピーされたノードは\n\n"+Clone.xml);
Clone.selectSingleNode("町").firstChild.text = "下寺";
alert("コピー内容の変更後は\n\n"+Clone.xml);
xmlobj.selectSingleNode("//data").appendChild(Clone);
sp2.innerHTML = ViewData(xmlobj); //false設定でコピー
var Clone = Source.cloneNode(false);
alert("false設定でコピーされたノードは\n\n"+Clone.xml);
}
function ViewData(xmlDoc){
var str = "";
var City = xmlDoc.selectNodes("//city");
for(i=0;i<City.length;i++){
str += " "+City[i].attributes[0].value + "番:";
str += City[i].firstChild.nodeValue;
str += City[i].selectSingleNode("区").text;
str += City[i].selectSingleNode("町").text+"<br>";
}
return str;
}
//--></SCRIPT>
</HEAD>
<BODY>
<button onclick="Test()">コピーのテスト</button>
<div>
元データは:<br><span id="sp1"></span><hr>
true設定でコピーし、一部変更して末尾に追加:<br><span id="sp2"></span>
</div>
end(05/4/22)