Вместо того, чтобы запускать один и тот же селектор 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
, если это возможно.