Javascript 使用jQuery选择具有.eq()的多个元素

Javascript 使用jQuery选择具有.eq()的多个元素,javascript,jquery,html-table,Javascript,Jquery,Html Table,我想从表中选择tds的子集 我事先知道索引是什么,但它们实际上是随机的(不是奇数或偶数索引等) 例如,假设我要选择第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 / lo

我想从表中选择tds的子集

我事先知道索引是什么,但它们实际上是随机的(不是奇数或偶数索引等)

例如,假设我要选择第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()
一个索引数组?(那不行)

如果没有,我将为
.eqMulti(array)
之类的东西编写一个小插件

注意:这些tds没有独占共享的类,因此基于类选择将不起作用。

试试这个

   $('table td:eq(0), table td:eq(5), table td:eq(9)')
我会用和:

另一种[更难看的]方法是映射到选择器:

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

我将VisioN的筛选方法包装到jQuery插件中:

$.fn.eqAnyOf = function (arrayOfIndexes) {
    return this.filter(function(i) {
        return $.inArray(i, arrayOfIndexes) > -1;
    });
};
因此,现在的用法很好且干净:

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

我认为第一个非常漂亮。好吧,这样就可以了,但是我想要的索引数组不是常数。它需要一个函数来将数组转换成一个字符串,就像您在这里给出的字符串一样。但是,对于已知索引,这是好的。@Sean So
“表td:eq('+array.join('),表td:eq(')+')”
?很好!在我的新项目中工作了一段时间。
$.fn.eqAnyOf = function (arrayOfIndexes) {
    return this.filter(function(i) {
        return $.inArray(i, arrayOfIndexes) > -1;
    });
};
var $tds = $('table td').eqAnyOf([1, 5, 9]);
$('table td').filter(':eq(' + indexesToSelect.join('), :eq(') + ')')