首先,我道歉。我知道我想做什么,但不知道我应该怎么称呼它或者如何问它,所以我的谷歌搜索是无用的。
我有一些动画我用来显示/隐藏文字。我试图在一个对象中包装它很好,但是我这样做,我每次都要运行一些计算代码,因为我不知道它存储在哪个部分。
现在,我讨厌的是我在每次传递时重新运行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();
});
答案 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];