0

オブジェクトの配列をフィルタリングし、配列内の反復ごとにテンプレートを取得して、現在のオブジェクトからの一意の情報 (プロパティ) に置き換えます。次に、テンプレートが DOM に追加されます。

最初のコード ブロックを見て、コード行がイテレータ関数$('body').append(temp);内にあることに注意してください。$.each

私は理解することに特に興味があります -

  1. 反復ごとに DOM が追加されるの$('body').append(temp);は、イテレータ関数内に残したからですか?$.each

  2. 配列に 50 個の項目のリストがある場合はどうなるでしょうか? その場合、反復ごとに DOM に何かを追加するのでしょうか?

コード

(function() {

        var content = [
            {
                title: "Speak of the devil and he shall appear",   
                thumbnail: 'images/bane.jpg',
            },
            {
                title: 'Me the joker',   
                thumbnail: 'images/Joker.jpg',
            },
        ];

             var template = $.trim( $('#blogTemplate').html() );

        $.each( content, function( index, obj ) { $(content).each(function() {})
            var temp =  
                    template.replace( /{{title}}/ig, obj.title )
                            .replace( /{{thumbnail}}/ig, obj.thumbnail );
            console.log(temp);

            $('body').append(temp);
        });

    })();

この問題を解決するには、代わりに文字列を作成してから、その文字列を DOM に一度だけスローする方がよいと思います。そこで、frag という新しい変数を作成し、それを空の文字列に設定しました。次に、オブジェクトの配列をフィルター処理し、DOM に追加するのではなく、配列内の各オブジェクトに対してfrag+=、スタックされたメソッドが続き.replaceます。

var template = $.trim( $('#blogTemplate').html() );
        var frag = '';

    $.each( content, function( index, obj ) { 
        frag +=     
                template.replace( /{{title}}/ig, obj.title )
                        .replace( /{{thumbnail}}/ig, obj.thumbnail );
        console.log(frag);
    });

    $('body').append(frag);

})();

そして終了したら、イテレータ関数$('body').append(frag);の外側で言うことができます。$.each

そして、これは私の最後の質問につながります:

3a. $ .each関数の反復ごとに DOM が更新されないようにしました$('body').append(temp);$.each

4

2 に答える 2

1

あなたの質問への答え

  1. はい、各ブロック内に追加すると、反復ごとにdomが追加されます
  2. はい、配列の 50 個のアイテムのそれぞれについて、DOM を操作します。
  3. はい、各ブロックの外側に追加することで、DOM を 1 回だけ操作します。

編集:また、各ブロック内に追加を残したい場合は、最初にコンテナ要素をDOMから削除して操作し、DOMに追加して戻す必要があります

于 2012-12-04T13:48:25.087 に答える
0
  1. はい、2. はい、3. はい - 3 つの質問はすべて予想どおりです。
于 2012-12-04T13:45:57.293 に答える