如何从表头(th)中获取相应的表列(td)?

我想得到表头的整个列。

例如,我想选择表头“Address”来隐藏地址列,并选择“Phone”标题来显示对应列。

我想做一些像http://www.google.com/finance?q=apl (参见相关公司表) (点击“添加或删除列”链接)

像这样的东西会起作用 –

 $('th').click(function() { var index = $(this).index()+1; $('table td:nth-child(' + index + '),table th:nth-child(' + index + ')').hide() }); 

如果单击标题,上面的代码将隐藏相关列,但逻辑可以根据您的要求进行更改。

演示 – http://jsfiddle.net/LUDWQ/

通过对HTML的几个简单修改,我会做类似以下的事情(无框架JS):

HTML:

 Name Address Phone 
Name Address
Freddy Nightmare Street
Luis Lost Street
Name Address Phone
Freddy Nightmare Street 123
Luis Lost Street 3456

使用Javascript:

 var cb = document.getElementsByClassName("chk"); var cbsz = cb.length; for(var n = 0; n < cbsz ; ++n) { cb[n].onclick = function(e) { var idx = e.target.getAttribute("data-index"); toggleColumn(idx); } } function toggleColumn(idx) { var tbl = document.getElementById("tbl"); var rows = tbl.getElementsByTagName("tr"); var sz = rows.length; for(var n = 0; n < sz; ++n) { var el = n == 0 ? rows[n].getElementsByTagName("th")[idx] : rows[n].getElementsByTagName("td")[idx]; el.style.display = el.style.display === "none" ? "table-cell" : "none"; } } 

http://jsfiddle.net/dbrecht/YqUNz/1/

我添加了复选框,因为将点击绑定到列标题没有意义,因为您无法切换可见性,只能隐藏它们。

您可以使用CSS执行某些操作,例如:

      
Name Address Phone
Freddy Nightmare Street 123
Luis Lost Street 3456

要隐藏列,可以使用Javascript将相应的类添加到表中。 这里隐藏了c2和c3。

您可以在样式标记中动态添加.c1,.c2,…,或定义最大数字。

最简单的方法是向每个匹配标题类的td添加一个类。 单击时,它会检查类,然后将每个td隐藏在该类中。 由于只有该列中的s会隐藏该类,因此它会有效地隐藏该列。

 
Name Address
Joe 123 Main St.

和脚本类似:

 $('th').click( function() { var col = $(this).html(); // Get the content of the  $('.'+col).hide(); // Hide everything with a class that matches the col value. }); 

无论如何,这样的事情。 这可能比它需要的更冗长,但它应该certificate原理。

另一种方法是简单地计算有问题的列数,然后遍历每一行并隐藏也是那么多列的td。 例如,如果要隐藏“地址”列并且它是列#3(索引2),那么您将遍历每一行并隐藏第三行(索引2)。

祝好运..

模拟Google财经显示/隐藏列function:

http://jsfiddle.net/b9chris/HvA4s/

 $('#edit').click(function() { var headers = $('#table th').map(function() { var th = $(this); return { text: th.text(), shown: th.css('display') != 'none' }; }); var h = ['
']; $.each(headers, function() { h.push(''); }); h.push('
', this.text, '
'); $('body').append(h.join('')); $('#done').click(function() { var showHeaders = $('#tableEditor input').map(function() { return this.checked; }); $.each(showHeaders, function(i, show) { var cssIndex = i + 1; var tags = $('#table th:nth-child(' + cssIndex + '), #table td:nth-child(' + cssIndex + ')'); if (show) tags.show(); else tags.hide(); }); $('#tableEditor').remove(); return false; }); return false; });
 jQuery('thead td').click( function () { var th_index = jQuery(this).index(); jQuery('#my_table tbody tr').each( function(index) { jQuery(this).children('td:eq(' + th_index + ');').each( function(index) { // do stuff here } ); } ); }); 

这是这种行为的工作小提琴:

http://jsfiddle.net/tycRW/

当然,隐藏列没有隐藏它的标题将有一些奇怪的结果。