2011-03-29 77 views
6

使用jquery,我想获取html表格的指定列中的所有元素。请注意,它可以超过一列jquery - 获取html表格的指定列中的元素

举例来说,如果我有以下HTML表格:

<table> 
    <tr> 
    <td> 
     a 
    </td> 
    <td> 
     b 
    </td> 
    <td> 
     c 
    </td> 
    </tr> 
    <tr> 
    <td> 
     1 
    </td> 
    <td> 
     2 
    </td> 
    <td> 
     3 
    </td> 
    </tr> 
</table> 

看起来如下:

1  2  3 
a  b  c 

我想获得1 ,3,a,c

我应该怎么做?什么是最有效的方法? (我正在遍历由一些报告实用程序生成的巨大表格)

+1

请更改您的问题! – waqasahmed 2011-03-29 15:39:16

+0

如果你有多行? – 2011-03-29 15:39:33

+0

我第二@waqasahmed它是非常混乱的,因为它是。 – Trufa 2011-03-29 15:39:53

回答

8

这里或多或少通用的例子让你定义所需的指数为数组:

var cellIndexMapping = { 0: true, 2: true }; 
var data = []; 

$("#MyTable tr").each(function(rowIndex) { 
    $(this).find("td").each(function(cellIndex) { 
     if (cellIndexMapping[cellIndex]) 
      data.push($(this).text()); 
    }); 
}); 

$("#Console").html(data.join("<br />")); 

测试用例:http://jsfiddle.net/yahavbr/FuDh2/

使用关联数组有更快的性能,据我知道搜索这样的数组中的特定项目应该已经优化。

注意,在JS第一个索引始终为0,所以1 ST和3 细胞意味着指数0和2

1

您可以使用选择器使用nth-child来完成。以下是另一种方式。

$("TABLE").find("tr").each(function(){ 
    var tr = this; 
    $([0,2]).each(function(){ 
     alert($(tr[this]).html()); 
    }); 
}); 

对于第一和第三,你必须指定0,2

2
var table = $("table"); // Make this more accurate if there are multiple tables on the page 
var rows = table.find("tr"); // Will find too much if there are <tr> tags nested in each other 

for (var i=0; i=rows.length; ++i) { 
    var cells = rows.eq(i).find("td"); 
    var values = [cells.eq(0).text(), cells.eq(2).text()]; 
} 
+1

+1注意到前两个选择器 – 2011-03-29 15:50:59

12

可以使用:nth-child()选择。

$("tr td:nth-child(1), tr td:nth-child(3)").css('color', 'red'); 
+0

的缺点有趣,有没有办法做到这一点,但有多种模式,没有再遍历整个细胞? – vondip 2011-03-29 15:48:30

+0

据我所知,除非要只选择奇数行或偶数行,否则必须为每列设置一个单独的模式,在这种情况下,您可以使用:nth-​​child(odd)。 – Kaivosukeltaja 2011-03-29 15:54:37

0

你可以像这样

var retorno=[]; 
linha=$("td:nth-child(1), td:nth-child(3)").clone().each(function(){retorno.push($(this).text())}); 

$.each(retorno,function(index, item) {$('#Console').append(item+', ');}); 

1使用克隆到不修改表,如果你删除表后修改此行。 2看跌元素融入RETORNO阵列 3,使用每个打印单元控制台内

你可以做太多这样的。用一条线:

$("td:nth-child(1), td:nth-child(3)").clone().map(function(){ return $(this).text()}).get().join(','); 

地图 - 创建阵列回报列 GET - 获取数组 加入 - 符合separete昌阵列逗号和显示

1,3,A,C

这是我能做的最好的。