32

假设我有一组 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/

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

有任何想法吗?

4

6 回答 6

28

尝试

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

或者

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

演示。

于 2012-07-03T04:01:52.753 回答
18

我来这里是为了寻找比我已经拥有的更清晰的答案,但没有找到。为了下一个出现的人,我想我会发布我的解决方案:

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

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

我有点惊讶没有一些jQuery特定的方法可以使这个更干净,但Array.reduce如果没有更具体的存在,它绝对是这项工作的正确工具jQuery

于 2016-12-04T00:48:06.847 回答
1

你能试试吗

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();
于 2012-07-03T03:54:40.463 回答
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();
于 2012-07-03T04:14:30.007 回答
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
}())
于 2012-07-03T03:51:59.733 回答
0

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

于 2012-07-03T03:59:30.187 回答