2012-11-13 5 views
10

JavaScriptでは、1回の操作で親ノードに子ノードの配列を追加する方法はありますか?JavaScriptを使用して親ノードに子ノードの配列を1回の操作で追加するにはどうすればよいですか?

不必要な再描画を防ぐため、これを1回の操作で実行したいと思います。

私は親を試しました.appendChild(arrayOfNodes)、しかし例外があります。

私は、いくつかのプロジェクトで再利用される小さなコンポーネントを作っています.jQueryやZeptoのようなライブラリに依存したくありません。

あなたが内部appendChildメソッドを呼び出します Nodeの方法、追加することができます
+1

ちょうど好奇心から(それがプロジェクトの制約でない限り)なぜjQuery **なし? – adamb

+0

私は再利用可能なコンポネントを作っています。jQueryやZeptoがそのプロジェクトで使われているので、標準のJavaScriptでなければなりません。 –

答えて

1

(function() { 
    Node.prototype.appendChildren(arrayOfNodes) { 
    var length = arrayOfNodes.length; 
    for (var i = 0; i < length; i++) { 
     this.appendChild(arrayOfNodes[i]); 
    } 
    }()); 

そのようにのように使用可能になります:

node.appendChildren(arrayOfNodes) 
+0

IE <9にNode.prototypeは存在しません。 –

9

あなたは中間DocumentFragmentを使用することができ、あります文書内の既存のノードに新しく作成したノードを追加する場合は、少し複雑ですが、一度にノードを作成するよりも優れたパフォーマンスを発揮します:

var frag = document.createDocumentFragment(); 
for (var i = 0; i < arrayOfNodes.length; ++i) { 
    frag.appendChild(arrayOfNodes[i]); 
} 
someElement.appendChild(frag); 
+0

私はかわいいですsomeElement.appendChild(frag.cloneNode(true))を実行することをお勧めします。理由は分かりませんが、John Resigの言葉通りです。私は彼を信頼する傾向があります。 – hobberwickey

+0

@hobberwickey:私はそうではありませんが、とにかくここにお勧めしたいとは思いません。クローンを作成する必要はありません。ノードにイベントハンドラが挿入されている場合、代わりにクローンを挿入するのは間違いです。 –

+0

@hobberwickey:複製する唯一の理由は、同じノードセットの複数のコピーをドキュメントに挿入する必要がある場合です。ここでは不要です。残念ながら、Resigの記事はこの点では明確ではありません。 –

1

私はこれが一種のものだと知っていますが、同様の質問がありました。私は親(ノード)と子ノード(nodeListまたはノードの配列)を取るプロトタイプを拡張したり、必要以上に複雑にしたりする単純な関数を書くことに決めました...

function appendChildren(parent, children) { 
    for (var i=0; i<children.length;i++) { 
     child = children[i]; 
     parent.appendChild(child); 
    } 
    return parent; 
} 
+0

この 'Element.prototype.appendChildren = appendChildren;'を追加して 'parent' argを削除すると、' this'になります – Guja1501