1

给定下表

<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是,缺少第一个元素?!

var a对于 X 列的选择,最简单的方法是什么。例如:

Select columns [1,4,5,6,7,8,9]

http://jsfiddle.net/kkgian/4kdNt/2/

TIA

4

2 回答 2

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。

于 2012-07-19T06:44:43.403 回答
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;
    });

演示

于 2012-07-19T07:16:09.523 回答