0

まず、お詫び申し上げます。私は自分が何をしたいのかは知っていますが、それを何と呼ぶべきか、またはそれをどのように尋ねるべきかをまったく知らないので、私のグーグルは実を結ばなかった。

テキストの表示/非表示に使用しているアニメーションがあります。すべてをオブジェクトにまとめようとしていますが、どのセクションに格納されているかわからないため、毎回計算コードを実行する必要があります。

今、私が嫌うのはcalculatePositions(entry);、保存された値を使用するのではなく、パスごとに関数を再実行していることです。問題は、これは複数の要素で発生するため、positions配列を変更する必要があることです。位置配列を特定のDOM要素に保存し、それを1回だけ計算する方法はありますか?entry毎回オブジェクトを渡すのではなく、これらの関数とプロパティをDOM要素にアタッチできますか?

私のコード:

var theShort = {};

theShort.toggle = function(){
    var positions = new Array;

    function calculatePositions(entry){
        /*
        positions = Nasty calculation code
        */
    }

    function showLong(entry){
        calculatePositions(entry);
        //My toggle code is obviously more complex and uses the positions array.
        //But for simplicity sake, I've omitted it
        $(entry).find('.tsl-theshort').show();
        $(entry).find('.tsl-thelong').hide();
    }

    function showShort(entry){
        calculatePositions(entry);
        $(entry).find('.tsl-theshort').show();
        $(entry).find('.tsl-thelong').hide();
    }

    return {
        init: function (){
            $('.tsl-showLong').click(function(){
                showLong($(this).closest('.entry-content'));
                return false;
            });

            $('.tsl-showShort').click(function(){
                showShort($(this).closest('.entry-content'));
                return false;
            });
        }
    };
}();

jQuery(document).ready(function($){
    theShort.toggle.init();
});
4

1 に答える 1

0

毎回計算関数を実行する必要がある場合は、要素のIDに基づいてキャッシュを設定してください。各要素がdom内で一意のIDを持っている場合、次のようなことを行うことができます

var cache = {};

function showLong(entry){
    var id = $(entry).attr('id');
    if(!cache[id])
        cache[id] = calculatePositions(entry);

    //My toggle code is obviously more complex and uses the positions array.
    //But for simplicity sake, I've omitted it
    $(entry).find('.tsl-theshort').show();
    $(entry).find('.tsl-thelong').hide();
}

function showShort(entry){
    var id = $(entry).attr('id');
    if(!cache[id])
        cache[id] = calculatePositions(entry);

    $(entry).find('.tsl-theshort').show();
    $(entry).find('.tsl-thelong').hide();
}

次に、要素の計算を検索する場合は、

var id = $(element).attr('id');
var calculation = cache[id];
于 2012-08-23T17:55:16.903 に答える