2012-07-03 21 views
26

私はjQueryオブジェクトの配列を持っていて、代わりに1つの複合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/

期待される結果は、両方のdivが隠されています。

アイデア?

+2

あなたのフィドルにはエラーがあるようです。要素 '#c 'はありません。編集:あなたの質問に私は 'add()'が唯一のオプションかもしれないと信じています。しかし、私は完全にはわかりません。 – powerbuoy

+0

@powerbuoy:はい、それはタイプミスです。ありがとう – zerkms

答えて

26

これを試してみてください

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

それとも

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

The demo.

+0

私が考えたのは 'var d = $(c.map(function(el){return el [0];}))'です。 +1は現在元の質問に答える唯一の答えだからです。 – zerkms

+1

'return el [0];'は最初の要素を取得します。セレクタが複数の要素に一致する場合、左要素は 'd'にありません。 – xdazz

+0

右は考慮しませんでした(オブジェクトあたり1つの要素しかないため) – zerkms

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 
}()) 
+0

私はセレクタを持っていません、私はオブジェクトの配列を持っています – zerkms

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

私はすでにオブジェクトの配列を持っています。したがって、例の 'a、b、c'変数は変更できません – zerkms

+0

おそらく' c'を繰り返して別の配列dを作成できます! –

+0

今はそれが仕事です。 jqueryオブジェクトを作成して '.add()'を使うのはちょっと良いかもしれませんが – zerkms

0

あなたはjQueryのオブジェクトの配列を持っていることを知っていると仮定すると、あなたが使用することができます$.eachを循環させます(または、通常の配列として処理して循環させます)。これを使用して、好きな場合は結合されたセレクタを作成したり、イテレータで操作を行うだけです。

+0

うん、私はそれらをトラバースでき、次は何ですか?この回答は完全ではありません。なぜなら、結果としてjqueryオブジェクトをどのように正確に取得するのかについて言及していないからです。 – zerkms

+0

@zerkmsなぜ繰り返し処理ではなくjQueryオブジェクトが必要ですか? –

+0

私は次の関数でオブジェクトを渡す必要があるので、それは単一のjqueryオブジェクトであると仮定します。 – zerkms

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

私はここに来て、私がすでに持っていたよりもきれいな答えを探していましたが、見つけられませんでした。

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

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

私はこのクリーナーを作るいくつかのjQuery具体的な方法がない種類の驚いているが、Array.reduceは間違いです:隣の男の酒が一緒に来て、私は私が代わりに私の解決策を投稿しますねjQueryに具体的なものがない場合、このジョブの正しいツールです。

関連する問題