解決済み

[JS] childNodesを置き換える

  • すぐに回答を!
  • 質問No.7337790
  • 閲覧数126
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 41% (72/172)

あるノードのchildNodesを別のノード配列オブジェクトに置き換えたいです。
以下のようにしてみました。

var nodes = new Array();
nodes[0] ... nodes[n] を作成。
var target = document.getElementById("id");
target.childNodes = nodes;

この処理はFF10ではスルーされてしまうようです。
1つずつappendChildしないで設定する方法はありますか?

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 60% (79/130)

http://www2u.biglobe.ne.jp/~oz-07ams/prog/dom-ref/Core/Node.html#Node-childNodes

> nodeObject.childNodes
> ***NodeList型***, ***読取専用***

DOM の NodeList はただの配列ではありません。内部的に整合性をとるための「生きたリスト」なので、基本的に専用操作なしに入れ替えたりはできません。

---

// Fx
var range = document.createRange();
range.selectNodeContents(target);
range.deleteContents();
nodes.reverse().forEach(range.insertNode, range);

// also IE
var df = document.createDocumentFragment();
for (var i = 0, I = nodes.length; i < I; i++) df.appendChild(nodes[i]);
while (target.hasChildNodes()) target.removeChild(target.lastChild);
target.appendChild(df);

ノードを入れる「容器」が必要なら DocumentFragment です。いずれにせよ「専用操作」としての appendChild() は必要です。

メソッド名が長くて面倒ということなら、DOM4 の append()、remove() の実装を待って下さい。
お礼コメント
palayo

お礼率 41% (72/172)

面倒という理由ではなく、1つずつappendChildすると遅いので、
ノードの配列の参照渡しができれば速いかと思ったのですが、
そうはいかないということですね。
ありがとうございました。
投稿日時 - 2012-03-07 10:27:05
感謝経済、優待交換9月20日スタート
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ