- ベストアンサー
thタグの複製と要素の入れ替えについて
- JavaScriptのcloneNodeメソッドを使用することで、thタグを複製しています。cloneNode(true)の場合は、複製元の要素の子要素もすべて複製されます。
- th.firstChild.data = ths[i];の文は、複製したthタグの最初の子要素のテキストデータをths[i]という変数の値に置き換えています。
- th = th.cloneNode(true);の行は、新しいthタグの作成を意味しています。この行がないと、複製元のthタグの参照が保持され、要素の入れ替えが正常に行われなくなります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
http://okwave.jp/qa/q8810003.html で回答したコードですね。 > th = th.cloneNode(true); th要素ノードを複製しています。 https://developer.mozilla.org/ja/docs/Web/API/Node.cloneNode オブジェクトは参照なので同じオブジェクトを使い回してappendChildしたら要素が移動するだけで複数の要素を生成できません。 createElementから作り直すのが一般的だと思いますが、同じような要素を何度も作るのは無駄なので雛形となるth要素ノードを生成しておき、cloneNodeで複製しています。 --- http://okwave.jp/qa/q8810003.html の件。 > ・innerTextを使用するようにしますー innerText はIEの独自拡張であり、全てのブラウザで使用できません。 innerTextを実装されている他のブラウザもありますが、標準化されていない為に挙動が同じ保証もありません。 似たプロパティとして textContent がありますが、innerText とは挙動が異なります。 http://d.hatena.ne.jp/cou929_la/20110517/1305644081 代入する分には textContent, innerText を使い分ければ問題ないかもしれませんが、仕様を追ってないので私からはお勧めできないですね。 IE8- を保証するなら createTextNode が最も無難な選択肢だと思います。 何度か仕様にまつわる質問をされていると思いますが、調べ方を工夫してみて下さい。 仕様のURLをブックマークしておくとか、Google検索でサイト検索してみるとか。 innerTextの件は少し検索すれば分かると思うのですが、おそらくまともに調べていないのではないでしょうか。 http://www.quirksmode.org/dom/html/ https://developer.mozilla.org/ja/docs/Web/API/Node.textContent http://msdn.microsoft.com/en-us/library/ie/ms533899.aspx # Re: re97さん
お礼
回答ありがとうございました。 >オブジェクトは参照なので同じオブジェクトを使い回してappendChildしたら要素が移動するだけ ・参考になりました >W3C DOM Compatibility - HTML ・このページ初めて知りました ・見やすいですね >標準化されていない為に挙動が同じ保証もありません ・メソッド毎にブラウザ対応状況を確認していく癖をつけた方が良いなと思いました >innerTextの件は少し検索すれば分かると思うのですが ・標準的な処理だと思い込んでました…