Подтвердить что ты не робот

Как создать объект jQuery из массива объектов jQuery?

Скажем, у меня есть массив объектов jQuery и вы хотите иметь один составной объект jQuery.

Каким будет решение, кроме ручной обхода массива и добавления элементов к только что созданному объекту jquery с помощью .add()?

Это не делает то, что я хочу:

var a = $('#a'),
    b = $('#b'),
    c = [a, b];

// the lines above is the set up, they cannot be changed
var d = $(c);
d.hide();​

http://jsfiddle.net/zerkms/896eN/1/

Ожидаемый результат: оба divs скрыты.

Любые идеи?

4b9b3361

Ответ 1

Try

var d = $($.map(c, function(el){return $.makeArray(el)}));

или

var d = $($.map(c, function(el){return el.get();}));

Демонстрация.

Ответ 2

Я пришел сюда, чтобы найти более чистый ответ, чем у меня, но не нашел его. Ради следующего парня, который я приду, думаю, я отправлю свое решение вместо этого:

var a = $('#a'),
    b = $('#b'),
    c = [a, b];

var d = c.reduce($.merge);
d.hide();​

Я удивлен, что не существует специального метода jQuery, который делает этот чист, но Array.reduce определенно является правильным инструментом для этого задания, если в jQuery не существует ничего более конкретного.

Ответ 3

Можете ли вы попробовать

var a = $('#a'),
b = $('#b'),
c = [a, b];
d = [];
$.each(c, function(i, v){
    if(v.length>0){
        d.push(v[0]);
    }
});

e = $(d);
e.hide();

Ответ 4

Попробуйте следующее:

var a = $('#a'),
    b = $('#b'),
    c = [a, b],
    d = $();
$.each(c, function(i, jqObj) {
    $.merge(d, jqObj);
});
d.hide();

или

var a = $('#a'),
    b = $('#b'),
    c = [a, b],
    d = $();
$.each(c, function(i, jqObj) {
    d = d.add(jqObj);
});
d.hide();

Ответ 5

var els = ['#a', '#b', '#c']
var $els = $(els.join(', '))

Изменить: Это сделает, уродливо tho:

var d = $(function(){
    var els = []
    for (var i = 0, l = c.length; i < l; i++)
        els.push(c[i][0])
    return els
}())

Ответ 6

Предполагая, что вы знаете, что у вас есть массив объектов jQuery, вы можете использовать $.each для их циклического перехода (или просто рассматривать их как обычный массив для их циклического перехода). Вы можете использовать это, чтобы создать комбинированный селектор, если хотите, или просто выполнить операции с ними в итераторе.