jquery循环来创建动态多个变量

时间:2010-11-04 14:50:18

标签: jquery variables for-loop

我不确定这是否可行,但我想动态创建多个变量,例如,这些是我手动创建的变量,

var left_1 = $('.column-global.left .item-global').eq(0);
var left_2 = $('.column-global.left .item-global').eq(1);
var left_3 = $('.column-global.left .item-global').eq(2);

但问题是我有时只需要两个或一个变量。但最多只有三个

所以我想将一个参数传递给函数,告诉代码创建2个或3个变量,

// I declare empty vars first
var left_1;
var left_2;
var left_3;

// get the number from somewhere, from the class for instnace
var last_class = $(this).attr("class").split(' ').slice(-1); 

// loop the number with for loop
for( var i = 1; i <= last_class; i++){
    left_1 = $('.column-global.left .item-global').eq(i-1);
}

但是你注意到我被卡住了 - 如何在for循环的{}中循环var?

基本上我想让for循环产生像这样的多个变量(与上面相同),

var left_1 = $('.column-global.left .item-global').eq(0);
var left_2 = $('.column-global.left .item-global').eq(1);
var left_3 = $('.column-global.left .item-global').eq(2);

有可能??

感谢。

P.S。

这里的一些答案暗示了一个数组,但我还有另一个问题......

bcos我还需要将vars传递给另一个函数,该函数保存在父函数中,如下所示,

another_function(left_1, left_2, left_3); 

那我怎么能用数组实现呢?感谢

2 个答案:

答案 0 :(得分:2)

不是一次运行相同的选择器3次并且一次拉出你想要的项目,为什么不运行一次并存储jQuery对象呢?

var $globals = $('.column-global.left .item-global')

然后你可以根据需要使用你需要的任何元素。

$globals.eq(1).doSomething();

或者因为jQuery对象是类似于Array的对象,所以可以通过索引获取每个DOM元素,如:

$globals[1] // to get the actual non-jQuery wrapped DOM element

编辑:关于你的问题中的更新,首先我会重做这个函数,如果可能的话接受1个jQuery对象。

如果那是不可能的,而你只需要传递个别参数,我会做两件事之一。

第一个想法。

如果可能的话,更改函数以便它可以接受DOM元素,然后将它们包装在函数中:

var $globals = $('.column-global.left .item-global');

another_function.apply( this, $globals.get() );

another_function(left_1, left_2, left_3) {
      // Wrap the DOM elements
    for( var i = 0, len = arguments.length; i < len; i++ ) {
        arguments[ i ] = $( arguments[ i ] );
    }
    // ...the rest of the code
}

通过调用another_function with .apply(),您可以传递一个参数数组,这些参数将分配给函数的各种参数。

这里我们使用jQuery's .get() method来传递DOM元素数组。

第二个想法。

如果绝对必须接受单独包装的DOM元素,请执行与上面相同的操作,但是创建单独包装的元素数组,如下所示:

var $globals = $('.column-global.left .item-global').map(function() {
    return $(this);
});

another_function.apply( this, $globals.get() );

这使用.map()创建jQuery对象的jQuery对象,然后使用.get()将Array拉出对象。

但如果可能,我真的会改变你的another_function

答案 1 :(得分:1)

为什么不使用数组?

var left = []

for( var i = 1; i <= last_class; i++){
     left[i] = $('.column-global.left .item-global').eq(i-1);
}

或更可能,因为数组是基于0的:

for( var i = 0; i < last_class; i++){
     left[i] = $('.column-global.left .item-global').eq(i);
}i