Цикл jquery для создания динамически-множественных переменных - PullRequest
2 голосов
/ 04 ноября 2010

Я не уверен, возможно ли это, но я хочу создать несколько переменных динамически, например, это переменные, которые я создаю вручную,

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?

В основном я хочу, чтобы цикл 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);

это возможно ??

спасибо.

приписка

некоторые ответы здесь предлагают массив, но у меня есть еще одна проблема ...

bcos Мне также нужно передать переменные в другую функцию, которая находится внутри этой родительской функции, например:

another_function(left_1, left_2, left_3); 

так как я могу добиться этого с массивом ?? спасибо

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Вместо того, чтобы запускать один и тот же селектор 3 раза и извлекать нужный элемент по одному, почему бы просто не запустить его один раз и сохранить этот объект jQuery?

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

Тогда вы можете использовать любой элемент (ы), который вам нужен, когда захотите.

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

Или, поскольку объект jQuery является объектом, подобным массиву, вы можете получить каждый отдельный элемент 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 с .apply(), вы можете передать массив аргументов, который будет присвоен различным параметрам функции.

Здесь мы использовали метод .get () jQuery для передачи массива элементов DOM.

Вторая идея.

Если вы абсолютно должны принять индивидуально упакованные элементы DOM, сделайте то же самое, что и выше, но создайте массив индивидуально упакованных элементов, например:

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

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

При этом используется .map() для создания объекта jQuery из объектов jQuery, затем используется .get() для извлечения массива из объекта.

Но на самом деле я бы изменил ваш another_function, если это возможно.

1 голос
/ 04 ноября 2010

Почему бы не использовать массив?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...