给出下表
<table id="t1" border="1">
<thead><tr><th>A</th><th>B</th><th>C</th></tr></thead>
<tfoot><tr><td>0</td><td>1</td><td>2</td></tr></tfoot>
<tbody>
<tr><td>3</td><td>4</td><td>5</td></tr>
<tr><td>6</td><td>7</td><td>8</td></tr>
<tr><td>9</td><td>10</td><td>11</td></tr>
<tr><td>12</td><td>13</td><td>14</td></tr>
<tr><td>15</td><td>16</td><td>17</td></tr>
</tbody>
</table>
我想仅在<tbody>
中选择第一列和第三列。请注意,对于大型表,多列的选择可能会有所不同。以下表达式返回此示例中的正确选择。
var a = $('#t1 tbody tr td:nth-child(1), #t1 tbody tr td:nth-child(3)')
但
var b = $('#t1 tbody tr td:nth-child(1), td:nth-child(3)')
b
将返回选择包括<tfoot>
。更多结果为b
结果,第一个元素丢失了?!
对于X列数,上面var a
选择的最简单方法是什么?
E.g:
Select columns [1,4,5,6,7,8,9]
http://jsfiddle.net/kkgian/4kdNt/2/
TIA
答案 0 :(得分:1)
用于选择同一行中的多个列:
$('#t1 tbody tr').find("td:nth-child(1), td:nth-child(3)");
以规则间隔选择列:
$('#t1 tbody tr td:nth-child(3n)'); //should get column 3, 6, 9, ...
作为推论,要使每个其他元素从1开始(在你的情况下为1和3):
$('#t1 tbody tr td:nth-child(2n+1)'); //should get column 1, 3, 5, ...
用于选择[1,4,5,6,7,8,9]列:
var cols = [1,4,5,6,7,8,9];
$('#t1 tbody tr td').filter(function(idx) {
return $.inArray(idx+1, cols)!=-1;
});
.filter()
是一种方法,用于将匹配元素集减少到您想要使用的元素集 - 在本例中为数组中指定的列索引。包含表达式返回true
的任何值。 注意:在.filter()
内,idx从0开始,因此如果数组中的值打算从1开始,请加1。
答案 1 :(得分:0)
var arr = [1, 4, 5, 6, 7, 8, 9],
rows = $('#t1 tbody tr'),
tds = $('td', rows).map(function() {
if ( $.inArray($(this).index(), arr) >= 0)
return this;
});
<强> Demo 强>