2013-04-25 22 views
11

テーブルからtdsのサブセットを選択したいとします。jQueryを使用して.eq()で複数の要素を選択する

私はインデックスが何であるかを手前に知っていますが、実際にはランダムです(奇数またはインデックスではありません)。

例えば、0番目、5番目、9番目を選択したいとします。

indexesToSelect = [0, 5, 9]; 

// 1) this selects the one by one 
$('table td').eq(0) 
$('table td').eq(5) 
$('table td').eq(9) 


// 2)this selects them as a group (with underscore/lodash) 
var $myIndexes = $(); 

_.forEach(indexesToSelect, function (idx) { 
    $myIndexes = $myIndexes.add($('table td').eq(idx)); 
}); 

だから、(2)動作し、私はそれを使用していますが、jQueryのを使用して、より自然な方法があるのだろうか。

.eq()にインデックスの配列を渡すようなものはありますか?私は.eqMulti(配列)のようなもののための小さなプラグインを作成しますされていない場合

// does not work 
$('table td').eq([0, 5, 9]) 

を(それは動作しません)。

注:これらのtdsが排他的に共有するクラスは存在しないため、クラスに基づいた選択は機能しません。

答えて

16

を試してみてください。

var elements = $("table td").filter(function(i) { 
    return $.inArray(i, indexesToSelect) > -1; 
}); 

別[より醜い]の方法は、セレクタへのマッピングです:

var elements = $($.map(indexesToSelect, function(i) { 
    return "td:eq(" + i + ")"; 
}).join(","), "table"); 
+0

私は最初はかなりハンサムだと思います。 – Jai

+0

フィルターは、私が欲しいもののように見える、ありがとう。 – Sean

2

は、私が.filter()$.inArray()でそれを行うだろうこの

$('table td:eq(0), table td:eq(5), table td:eq(9)') 
+0

まあ、これはそれを行うだろうが、私はしたいインデックスの配列は一定ではありません。配列を、ここで与えたような文字列に変換する関数が必要です。しかし、既知のインデックスについては、これは良いことです。 – Sean

6

VisioNのフィルタメソッドをjQuerにラップしました。 yのプラグイン:

$.fn.eqAnyOf = function (arrayOfIndexes) { 
    return this.filter(function(i) { 
     return $.inArray(i, arrayOfIndexes) > -1; 
    }); 
}; 

だから今使用がきれいです:

var $tds = $('table td').eqAnyOf([1, 5, 9]); 
+0

ニース!私の新しいプロジェクトで治療をしました。 – AshHimself

+0

これは素晴らしいです - ありがとう。 – cheshireoctopus

2
$('table td').filter(':eq(' + indexesToSelect.join('), :eq(') + ')') 
関連する問題