如何从jQuery对象数组创建jQuery对象?

时间:2012-07-03 03:44:46

标签: arrays jquery

假设我有一个jQuery对象数组,并希望改为使用一个复合jQuery对象。

除了手动遍历数组并使用.add()将元素附加到刚刚创建的jquery对象之外,还有什么解决方案?

这不符合我的要求:

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/

预期结果是两个div都被隐藏。

有什么想法吗?

5 个答案:

答案 0 :(得分:27)

尝试

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

或者

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

The demo.

答案 1 :(得分:1)

你可以try

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();

答案 2 :(得分:1)

试试这个:

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();

答案 3 :(得分:0)

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

编辑:这样做,丑陋的:

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

答案 4 :(得分:0)

假设你知道你有一个jQuery对象数组,你可以使用$.each来循环它们(或者只是将它们视为一个普通的数组来循环它们)。如果您愿意,可以使用它来创建组合选择器,或者只在迭代器中对它们进行操作。