-1

私は、 jQueryのロードが使用されているのを見た以上のことを行う次のコードを持っています:

        $.ajax({
            url: href,
            type: 'GET'
        })
        .success(function (content) {
            $('#content')
                .html("<div class='block-border'>" + content + "</div>")
                .applyTemplateSetup()
                .buildTableOfContent();
            if ($('#cityLegend-1').length) {
                $('#cityLegend-1').html("Question " + html);
            }
            $('#article').css('visibility', 'visible');
            var editHref = "/Admin/Contents/Edit?pk=0003000&rk=" + href.substring(2,5);
            $('#editContent').attr('data-href', editHref);
        })
        .fail(function (ajaxContext) {
            ajaxOnFailure(ajaxContext)
        });

私のコンテンツには、グループ内の信頼できるソースによって作成されたHTMLが含まれている可能性があることに注意してください。

これにjQueryロードを使用できるかどうか誰かに教えてもらえますか?多分多すぎると思いますが、確認したいと思います。

また、jQueryロードを使用できた場合、それを使用することに利点はありますか。この質問がそれほど賢明に聞こえない場合は申し訳ありませんが、私がこれらすべてを尋ねる理由は、jQuery.loadに機能を追加する与えられたテンプレート関数を利用したいからです。

4

2 に答える 2

1

これを使用することと、通常行うこととの主な違いは、loadAJAXを介して返されるコンテンツを広範囲に操作したり、他のメソッドを呼び出したりすることです。loadカスタムコールバックを使用して基本的にすべてを実行することで、これを実行できます。この関数が実行していること。

しかし、これを行うことでどのような利点が得られるかはわかりません。loadover ajax、などを使用する主な利点はget、返されたコンテンツから特定の要素を取得して、それをターゲットノードに配置できることです。この場合、返されたコンテンツはすべて使用されているように見えるため、を使用してもメリットはありませんload

于 2012-09-11T14:58:15.307 に答える
1

免責事項:これは元の質問に対する回答ではありませんが、コメントから別の質問に回答します。(私、コミュニティを許してください)。


パフォーマンスが気になる場合。domに添付されていないドキュメントフラグメントに対してテンプレート関数(applyTemplateSetup、buildTableOfContent)を実行する方がおそらく良いでしょう。後ですべての準備ができたら添付してください:)[DOMへのアクセスと操作はしばしばボトルネックになります]


「あなたのdomに添付されていないドキュメントフラグメント」の意味についてもう少し説明していただけますか?


それは「リフロー」を最小限に抑えることです。
DOMにアクセスして操作するたびに、ブラウザーはほとんどすべてのサイズと位置を再計算する必要があります(ブラウザー固有の最適化を除く)。

したがって、Ajaxごとに受け取った要素をドキュメントに添付する前に操作することをお勧めします。これにより、ブラウザーは何も計算しません。つまり、ドキュメントフラグメントをドキュメントに添付するときに1回だけ計算します。ドキュメントフラグメントは、「DOMノードを保持できる軽量のコンテナー」です。

実際には、これはあなたにとって次のことを意味します。

$.ajax({
    url: href,
    type: 'GET'
}).success(function (content) {
    var container = $('<div id="content">'); // create a new container
    //this new container is not attached to the document

    //the following manipulations cause no reflow
    container.html("<div class='block-border'>" + content + "</div>")
        .applyTemplateSetup()
        .buildTableOfContent();

    //attach the new container to the dom (replacing the old one)
    //reflowing the document only once
    $('#content').replaceWith(container);

    if ($('#cityLegend-1').length) {
        $('#cityLegend-1').html("Question " + html);
    }
    $('#article').css('visibility', 'visible');
    var editHref = "/Admin/Contents/Edit?pk=0003000&rk=" + href.substring(2, 5);
    $('#editContent').attr('data-href', editHref);
}).fail(function (ajaxContext) {
    ajaxOnFailure(ajaxContext)
});

もちろん、HTML構造に基づいて、これを行う方法は無限にあります。これは1つだけです。

于 2012-09-11T16:13:50.887 に答える