Javascript 使用jQuery选择具有.eq()的多个元素
我想从表中选择tds的子集 我事先知道索引是什么,但它们实际上是随机的(不是奇数或偶数索引等) 例如,假设我要选择第0、第5和第9个tdJavascript 使用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
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(') + ')')