0

これは私が気づいた奇妙な動作です。ドキュメントをリセットせずに追加した後すぐに使用しましたが、含まれていた以前の要素はそこにありませんでした。

このままクリアすればいいの?

frag_inner = '';

私が気付いていない副作用はありますか?

frag_outer = NS.createDocumentFragment();
frag_inner = NS.createDocumentFragment();

NS.eachIndex(obj, function(val) {

    // fragment element - inner

    // image element

    val.view_picture = (val.picture === '0') ? this.A.images + 'generic_large.jpg' :
            this.A.pictures + val.h_file  + '-2.jpg';
    img_element = $A.createElement('img');
    img_element.className = 'tweet';
    img_element.src = val.view_picture;
    frag_inner.appendChild(img_element);

    // link element

    link_element = $A.createElement('a');
    link_element.className = 'tweet';
    link_element.innerHTML = val.name + ' posted ' +
            this.prettyTime(val.time) + '<br>';
    frag_inner.appendChild(link_element);

    // paragraph element

    par_element = $A.createElement('p');
    par_element.className = 'tweet';
    par_element.innerHTML = val.tweet;
    frag_inner.appendChild(par_element);

    // div element

    div_element = $A.createElement('div');
    div_element.className = 'tweet';
    div_element.appendChild(frag_inner);

    // append the div which is now populated

    frag_outer.appendChild(div_element);

}, this);
4

1 に答える 1

2

私はそれが実際に期待される動作だと思います...

Node.appendChild1)既存のノードを移動することは のよく知られた機能です。ドキュメント(MDN)で述べたように...

[Node.appendChild]... 指定された親ノードの子のリストの最後にノードを追加します。ノードが既に存在する場合は、現在の親ノードから削除され、新しい親ノードに追加されます。

2) を追加documentFragmentすると、実際にはそのすべての子が追加されます ( MDNが再び):

他のさまざまなメソッドがドキュメント フラグメントを引数として取ることができます (たとえば、Node.appendChild や Node.insertBefore などの任意の Node インターフェイス メソッド)。この場合、フラグメント自体ではなく、フラグメントの子が追加または挿入されます。

ポイントは、 someNode.append(documentFragment) を実行するときに、そのすべての子をそこから削除してから、それらを に追加することsomeNodeです。そのためdocumentFragment、結果として空になります。


これを行うときは注意してください...

frag_inner = '';

... この変数に格納されている documentFragment をクリアしているのではなく、代わりに新しい値 (明らかに空の文字列) を格納しています。documentFragment と同じようにそれを操作しようとすると、次のような結果になるはずTypeError: Object has no method 'appendChild'です。

于 2013-06-10T19:19:35.507 に答える