通过jQuery .each()推送对象参数

时间:2013-12-05 21:29:39

标签: jquery nicescroll

任何人都有使用niceScroll的经验...我正在尝试优化将滚动条分配给各自元素并附加其属性的代码。这仅适用于数组中存在的第一个对象($ ele1):

var obj = {
  cursorwidth: 6,
  railoffset: {top:0,left:20}
};

var eleArray = [$ele1, $ele2];

$(eleArray).each(function() {

   $(this).niceScroll( obj );

});

但是对于数组中的所有对象都可以:

var eleArray = [$ele1, $ele2];

$(eleArray).each(function() {

  $(this).niceScroll( {
     cursorwidth: 6,
     railoffset: {top:0,left:20}
  } );

});

是否可以从外部var中精简这些属性,以便处理数组中的所有对象?

1 个答案:

答案 0 :(得分:1)

您可以为迭代重用相同的输入obj的原因是,在内部,插件正在添加与单个实例相关的各种信息。 看一下这个例子:

http://jsfiddle.net/46TLb/

检查控制台。你正在传递这个:

{"cursorwidth":6,"railoffset":{"top":0,"left":20}}

它会添加并转换为类似的内容:

{"cursorwidth":6,"railoffset":{"top":0,"left":20},"doc":{"0":{"jQuery110107344591654536623":7},"context":{"jQuery110107344591654536623":7},"length":1}}

所以答案是:你不能将相同的传递参数实例重用于niceScroll函数,因为它为了方便起见正在改变它。 而且,实际上,这不是一个很好的优化。如果需要优化,可以尝试使用内置的javascript for循环替换每个函数的jquery:

var eleArray = [$ele1, $ele2];

for (var i = 0; i < eleArray.length; ++i) {

  eleArray[i].niceScroll( {
     cursorwidth: 6,
     railoffset: {top:0,left:20}
  } );

}

阅读本文以获取有关使用jquery进行优化的更多信息:http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/