Bri*_*her 144 html jquery html-table show hide
我有一个包含多个列的HTML表,我需要使用jquery实现列选择器.当用户单击复选框时,我想隐藏/显示表中的相应列.我想这样做而不将表附加到表中的每个td,有没有办法使用jquery选择整个列?以下是HTML的示例.
<table>
<thead>
<tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
</thead>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>
<form>
<input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
<input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
<input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>
Run Code Online (Sandbox Code Playgroud)
Len*_*rri 239
使用jQuery隐藏第二列的一行代码:
$('td:nth-child(2)').hide();
Run Code Online (Sandbox Code Playgroud)
如果您的表有标题(th),请使用:
$('td:nth-child(2),th:nth-child(2)').hide();
Run Code Online (Sandbox Code Playgroud)
jsFiddle测试代码:http://jsfiddle.net/mgMem/1/
如果你想看一个好的用例,请看看我的博客文章:
bob*_*nce 83
我想这样做而不需要为每个td附加一个类
就个人而言,我会采用class-on-each-td/th/col方法.然后,您可以使用对容器上的className的单个写入来打开和关闭列,假设样式规则如下:
table.hide1 .col1 { display: none; }
table.hide2 .col2 { display: none; }
...
Run Code Online (Sandbox Code Playgroud)
这比任何JS循环方法都要快; 对于很长的表,它可以对响应性产生重大影响.
如果你可以逃避不支持IE6,你可以使用邻接选择器来避免必须将类属性添加到tds.或者,如果您关心的是使标记更清晰,您可以在初始化步骤中自动从JavaScript添加它们.
Lui*_*tti 11
你可以使用colgroups:
<table>
<colgroup>
<col class="visible_class"/>
<col class="visible_class"/>
<col class="invisible_class"/>
</colgroup>
<thead>
<tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
</thead>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)
然后你的脚本可以改变欲望<col>类.
Era*_*rin 10
以下应该这样做:
$("input[type='checkbox']").click(function() {
var index = $(this).attr('name').substr(2);
$('table tr').each(function() {
$('td:eq(' + index + ')',this).toggle();
});
});
Run Code Online (Sandbox Code Playgroud)
这是未经测试的代码,但原则是您在每行中选择与从复选框名称中提取的所选索引相对应的表格单元格.您当然可以使用类或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()
})
Run Code Online (Sandbox Code Playgroud)
为此,我们将在表中添加一些标记。在每个列标题中,我们可以添加类似的内容以提供可点击内容的可视指示
<button class="pull-right btn btn-default btn-condensed hide-column"
data-toggle="tooltip" data-placement="bottom" title="Hide Column">
<i class="fa fa-eye-slash"></i>
</button>
Run Code Online (Sandbox Code Playgroud)
我们将允许用户通过表格页脚中的链接还原列。如果默认情况下它不是持久性的,则在表头中动态切换它可能会在表中产生混乱,但您实际上可以将其放置在所需的任何位置:
<tfoot class="show-column-footer">
<tr>
<th colspan="4"><a class="show-column" href="#">Some columns hidden - click to show all</a></th>
</tr>
</tfoot>
Run Code Online (Sandbox Code Playgroud)
这是基本功能。这是下面的演示,还有更多细节。您还可以在按钮上添加工具提示,以帮助阐明按钮的用途,将按钮有机地设置为表格标题的样式,并折叠列宽,以添加一些(有点奇怪的)css动画以使过渡少一些跳动的。
$(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'
})
})Run Code Online (Sandbox Code Playgroud)
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;
}Run Code Online (Sandbox Code Playgroud)
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/paper/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<table class="table table-condensed table-hover table-bordered table-striped table-hideable">
<thead>
<tr>
<th>
Controller
<button class="pull-right btn btn-default btn-condensed hide-column" data-toggle="tooltip" data-placement="bottom" title="Hide Column">
<i class="fa fa-eye-slash"></i>
</button>
</th>
<th class="hide-col">
Action
<button class="pull-right btn btn-default btn-condensed hide-column" data-toggle="tooltip" data-placement="bottom" title="Hide Column">
<i class="fa fa-eye-slash"></i>
</button>
</th>
<th>
Type
<button class="pull-right btn btn-default btn-condensed hide-column" data-toggle="tooltip" data-placement="bottom" title="Hide Column">
<i class="fa fa-eye-slash"></i>
</button>
</th>
<th>
Attributes
<button class="pull-right btn btn-default btn-condensed hide-column" data-toggle="tooltip" data-placement="bottom" title="Hide Column">
<i class="fa fa-eye-slash"></i>
</button>
</th>
</thead>
<tbody>
<tr>
<td>Home</td>
<td>Index</td>
<td>ActionResult</td>
<td>Authorize</td>
</tr>
<tr>
<td>Client</td>
<td>Index</td>
<td>ActionResult</td>
<td>Authorize</td>
</tr>
<tr>
<td>Client</td>
<td>Edit</td>
<td>ActionResult</td>
<td>Authorize</td>
</tr>
</tbody>
<tfoot class="footer-restore-columns">
<tr>
<th colspan="4"><a class="restore-columns" href="#">Some columns hidden - click to show all</a></th>
</tr>
</tfoot>
</table>Run Code Online (Sandbox Code Playgroud)
当然,支持 以下浏览器的 CSS 唯一方法nth-child:
table td:nth-child(2) { display: none; }
这适用于 IE9 和更新版本。
对于您的用例,您需要几个类来隐藏列:
.hideCol1 td:nth-child(1) { display: none;}
.hideCol2 td:nth-child(2) { display: none;}
Run Code Online (Sandbox Code Playgroud)
等等...