让jQuery使用DOM元素作为对象?

时间:2012-08-23 17:50:14

标签: javascript jquery

首先,我道歉。我知道我想做什么,但不知道我应该怎么称呼它或者如何问它,所以我的谷歌搜索是无用的。

我有一些动画我用来显示/隐藏文字。我试图在一个对象中包装它很好,但是我这样做,我每次都要运行一些计算代码,因为我不知道它存储在哪个部分。

现在,我讨厌的是我在每次传递时重新运行calculatePositions(entry);函数而不是使用保存的值。麻烦的是,这将发生在多个元素上,因此位置数组需要改变。有没有办法将位置数组保存到特定的DOM元素并只计算一次?我可以将这些函数和属性附加到DOM元素,而不是每次都传入entry对象吗?

我的代码:

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();
});

1 个答案:

答案 0 :(得分: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];