我有一个包含几列的HTML表,我需要使用jquery实现一个列选择器。 当用户单击复选框时,我要隐藏/显示表中的相应列。 我想在不将类附加到表中的每个td的情况下执行此操作,是否可以使用jquery选择整个列? 以下是HTML的示例。
Header 1Header 2Header 3
Column1Column2Column3Column1Column2Column3Column1Column2Column3Column1Column2Column3
Hide/Show Column 1
Hide/Show Column 2
Hide/Show Column 3
希望以下网站对您有所帮助:fiendish.demon.co.uk/html/Javascript/hidetablecols.html
我使用jQuery实现了该解决方案,并且对我来说效果非常好:http://www.devcurry.com/2009/07/hide-table-column-with-single-line-of.html
每个用户344059的评论,这是断开的链接的Web存档http://www.fiendish.demon.co.uk/html/Javascript/hidetablecols.html
使用jQuery的一行代码隐藏了第二列:
$('td:nth-child(2)').hide();
如果您的表具有header(th),请使用此命令:
$('td:nth-child(2),th:nth-child(2)').hide();
资料来源:用单行jQuery代码隐藏表格列
jsFiddle测试代码:http://jsfiddle.net/mgMem/1/
如果您想查看一个好的用例,请看一下我的博客文章:
隐藏表列,并使用jQuery根据值对行着色。
顺便说一句,在示例中没有,是否没有忽略colspans的问题?好,如果您不使用它们。还有另一个相关问题:stackoverflow.com/questions/1166452/
我必须将tbody添加到选择器中,以避免用寻呼机隐藏页脚:$(。webgrid tbody td:nth-??child(1),.webgrid th:nth-??child(1))。hide();
@KimR这可能有助于解决colspan问题stackoverflow.com/questions/9623601/
我不知道为什么,但是我不得不使用nth-of-type来使其工作。例如:$(table td:nth-??of-type(2))。hide();
@LeopoldoSanczyk您使用的是Safari吗?似乎需要第n个类型
@ykay我忘了提及我使用的是Firefox。从日期来看,是32.0.X还是封闭版本。
@LeopoldoSanczyk好吧,我问,因为当客户要求他的网站在野生动物园工作时,我碰到了这一点。 Firefox也可能一样
注意:使用$(.mycol).closest(th).index()获取索引时,您必须添加1,因为nth-child从1开始!所以colIdx = $(.mycol).closest(th).index() + 1
I would like to do this without attaching a class to every td
就我个人而言,我会采用"每课时上课/上课/上课"的方法。然后,您可以通过对容器上的className的一次写操作来打开和关闭列,并假设样式规则如下:
table.hide1 .col1 { display: none; }
table.hide2 .col2 { display: none; }
...
这将比任何JS循环方法都要快。对于非常长的表,它可以对响应能力产生重大影响。
如果可以摆脱不支持IE6的困扰,则可以使用邻接选择器来避免将类属性添加到tds。或者,如果您担心使标记更整洁,则可以在初始化步骤中从Javascript自动添加它们。
感谢您的建议,我一直想保持HTML的整洁,但是当表的大小接近100行时,性能无疑成为一个问题。该解决方案将性能提高了2-5倍。
在性能方面,这种方法对我来说是个奇迹。谢谢!
我将此添加到css .hidden {display:none;}中并使用了.addClass(hidden)和.removeClass(hidden),这比.hide()和.show()快一点。
您可以使用colgroups:
Header 1Header 2Header 3
Column1Column2Column3Column1Column2Column3Column1Column2Column3Column1Column2Column3
然后,您的脚本可能只更改了欲望
类。
我似乎记得colgroup没有跨浏览器的支持,这不再是事实吗?
也许。我在hilight列上使用此方法,(firefox,safari,chrome正常工作)从未在IE中尝试过。
@Brian-IE8无法正常工作,启用IE7的IE8似乎可以正常工作。
在现代浏览器(Chrome和Firefox)中,这似乎不再起作用
@JBE:确切地说,这在某种程度上可以在现代浏览器中使用。使用$(table > colgroup > col.yourClassHere) jQuery选择器,您仍然可以像设置整个列的背景色一样设置smth,但是您将无法再切换列的可见性。经过测试的浏览器是MSIE 11,Safari 5,Chromium 44,Opera 12,Mozilla SeaMonkey 2.40,Mozilla Firefox43。" HTML5不支持HTML 4.01中的大多数属性"-请参见此处。
请执行以下操作:
$("input[type='checkbox']").click(function() {
var index = $(this).attr('name').substr(2);
$('table tr').each(function() {
$('td:eq(' + index + ')',this).toggle();
});
});
这是未经测试的代码,但是原理是您在每一行中选择与从复选框名称中提取的所选索引相对应的表格单元格。您当然可以使用类或ID来限制选择器。
这是功能更全的答案,它在每列的基础上提供了一些用户交互。如果这将是一种动态体验,则每个列上都需要有一个可单击的切换,以指示可以隐藏该列的能力,然后需要一种方法来还原以前隐藏的列。
在Javascript中看起来像这样:
$('.hide-column').click(function(e){
var $btn = $(this);
var $cell = $btn.closest('th,td')
var $table = $btn.closest('table')
// get cell location - https://stackoverflow.com/a/4999018/1366033
var cellIndex = $cell[0].cellIndex + 1;
$table.find(".show-column-footer").show()
$table.find("tbody tr, thead tr")
.children(":nth-child("+cellIndex+")")
.hide()
})
$(".show-column-footer").click(function(e) {
var $table = $(this).closest('table')
$table.find(".show-column-footer").hide()
$table.find("th, td").show()
})
为此,我们将在表中添加一些标记。在每个列标题中,我们可以添加类似的内容以提供可点击内容的可视指示
data-toggle="tooltip" data-placement="bottom" title="Hide Column">
我们将允许用户通过表格页脚中的链接还原列。如果默认情况下它不是持久性的,则在表头中动态切换它可能会在表中产生混乱,但您实际上可以将其放置在所需的任何位置:
Some columns hidden - click to show all
这是基本功能。这是下面的演示,还有更多细节。您还可以在按钮上添加工具提示,以帮助阐明按钮的用途,将按钮有机地设置为表格标题,并折叠列宽,以添加一些(有点怪异)的css动画以使过渡少一些跳动的。
![r0wDN.gif](https://img.php1.cn/3cd4a/1eebe/cd5/6789f68dabde0aed.png)
jsFiddle和Stack片段中的工作演示:
$(function() {
// on init
$(".table-hideable .hide-col").each(HideColumnIndex);
// on click
$('.hide-column').click(HideColumnIndex)
function HideColumnIndex() {
var $el = $(this);
var $cell = $el.closest('th,td')
var $table = $cell.closest('table')
// get cell location - https://stackoverflow.com/a/4999018/1366033
var colIndex = $cell[0].cellIndex + 1;
// find and hide col index
$table.find("tbody tr, thead tr")
.children(":nth-child(" + colIndex +")")
.addClass('hide-col');
// show restore footer
$table.find(".footer-restore-columns").show()
}
// restore columns footer
$(".restore-columns").click(function(e) {
var $table = $(this).closest('table')
$table.find(".footer-restore-columns").hide()
$table.find("th, td")
.removeClass('hide-col');
})
$('[data-toggle="tooltip"]').tooltip({
trigger: 'hover'
})
})
body {
padding: 15px;
}
.table-hideable td,
.table-hideable th {
width: auto;
transition: width .5s, margin .5s;
}
.btn-condensed.btn-condensed {
padding: 0 5px;
box-shadow: none;
}
/* use class to have a little animation */
.hide-col {
width: 0px !important;
height: 0px !important;
display: block !important;
overflow: hidden !important;
margin: 0 !important;
padding: 0 !important;
border: none !important;
}
Controller
Action
Type
Attributes
HomeIndexActionResultAuthorizeClientIndexActionResultAuthorizeClientEditActionResultAuthorizeSome columns hidden - click to show all
您正在隐藏最近的1列,如何隐藏最近的3列?
检查我的表格-i.stack.imgur.com/AA8iZ.png和包含表格html的问题-stackoverflow.com/questions/50838119/按钮将在A,B和C之后
很抱歉,无法恢复这样的旧答案,但是是否有一种简单的方法可以将某些列默认设置为隐藏?我试图用$(document).ready这样做但没有运气
@RobotJohnny,好问题。这使用类.hide-col删除列,但是它也可以用于指示状态,因此您可以-在呈现html时将.hide-col添加到每个td和tr中并完成操作。或者,如果您想将其添加到更少的位置,则将其放置在标题中(该状态必须到某个地方),并在初始化时使用它在子级中隐藏该列索引。当前,代码只是侦听单击位置,但也可以对其进行修改以查找类位置。还有,土耳其快乐的一天
@RobotJohnny,我更新了代码示例以包括初始化处理。 只需将class=hide-col放到html中您想要的任何位置(可能在thead > tr > th中最有意义,它将进行选择以确保它隐藏了该列中的所有单元格并动态显示了还原页脚
隐藏任何列时如何保持列宽固定?
@sjain,演示中的表的宽度设置为100%,因此,当删除列时,其他列将占据该空间。 一种方法是不让表格填充100%的宽度,然后每列将独立调整大小并保留其宽度,无论可见的是什么。 这是jsFiddle中这种方法的示例
当然,对于支持nth-child的浏览器,CSS唯一的方法是:
table td:nth-child(2) { display: none; }
这适用于IE9及更高版本。
对于您的用例,您需要几个类来隐藏列:
.hideCol1 td:nth-child(1) { display: none;}
.hideCol2 td:nth-child(2) { display: none;}
等等...
First Name
....
...
$(document).ready(function() {
$('#demo').multiselect();
});
$("input:checkbox:not(:checked)").each(function() {
var column ="table ." + $(this).attr("name");
$(column).hide();
});
$("input:checkbox").click(function(){
var column ="table ." + $(this).attr("name");
$(column).toggle();
});
以下内容基于Eran的代码进行了一些小的更改。经过测试,它在Firefox 3,IE7上似乎可以正常工作。
/p>
"http://www.w3.org/TR/html4/loose.dtd">
$(document).ready(function() {
$('input[type="checkbox"]').click(function() {
var index = $(this).attr('name').substr(3);
index--;
$('table tr').each(function() {
$('td:eq(' + index + ')',this).toggle();
});
$('th.' + $(this).attr('name')).toggle();
});
});
Header 1Header 2Header 3
Column1Column2Column3Column1Column2Column3Column1Column2Column3Column1Column2Column3
Hide/Show Column 1
Hide/Show Column 2
Hide/Show Column 3
没有课?然后,您可以使用标签:
var tds = document.getElementsByTagName('TD'),i;
for (i in tds) {
tds[i].style.display = 'none';
}
并显示给他们使用:
...style.display = 'table-cell';