2013-04-25 101 views
11

我想從表中選擇tds的子集。使用jQuery使用.eq()選擇多個元素

我事先知道索引是什麼,但它們是有效的隨機數(不是奇數或偶數索引等)。

例如說我想選擇第0,第5和第9個TD。

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()索引數組? (這是行不通的)

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

如果沒有,我會寫一個類似.eqMulti(array)的小插件。

注意:沒有這些tds獨佔的類,所以基於類的選擇將不起作用。

回答

16

我與.filter()$.inArray()做到這一點:

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 2013-04-25 11:18:22

+0

過濾器看起來像我想要的,謝謝。 – Sean 2013-04-25 11:51:51

2

試試這個

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

那麼,這將做到這一點,但我想索引的數組是不是恆定的。它需要一個函數來將數組轉換爲像你在這裏給出的那樣的字符串。但是,對於已知的索引來說這很好。 – Sean 2013-04-25 11:53:57

6

我將VisioN的過濾方法包裝到jQuer中Ÿ插件:

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

所以,現在的使用是非常乾淨的:

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

不錯!在我的新項目中工作過。 – AshHimself 2014-09-10 11:40:33

+0

這太棒了 - 謝謝。 – cheshireoctopus 2015-03-27 19:56:27

2
$('table td').filter(':eq(' + indexesToSelect.join('), :eq(') + ')')