jquery.dataTables表格列动态显示隐藏封装(二)

jquery.dataTables 提供了列的显示隐藏方法。
做过企业管理项目前台的程序员可能都知道,许多用户在查看一些业务数据的时候,喜欢将表格不关心的数据进行隐藏。便于信息的比对与查看。在此我对jquery.dataTables的控件做了一个简单的封装,将表格列的显示与隐藏功能做成一个小的控件,先看下效果图。
这里写图片描述

点击checkbox 将勾去掉则将该列进行隐藏,勾上则表示将该列进行显示。这里我们将第一、二以及最后一列都进行隐藏,效果如图:

这里写图片描述

实现步骤:
第一步:需要在搜索框后面添加一排按钮,然后点击最后的按钮时,能弹出一个下拉列表。我这里html代码如下,前提条件时我用了bootstrap框架作为自己的基础框架。

<!--按钮的代码-->
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="fa fa-th icon-th"></i> <span class="caret"></span></button>
<!--点击按钮会弹出下面的相应的下拉列表-->
<ul class="dropdown-menu" role="menu">
<li data-column="1"><label>
<input data-column="1" type="checkbox" data-field="name" value="1" checked="checked"> 序号</label></li>
<li data-column="2"><label>
<input data-column="2" type="checkbox" data-field="date" value="2" checked="checked"></label></li>
<li data-column="3"><label><input type="checkbox" data-field="amount" data-column="3" checked="checked">角色名称</label></li>
<li data-column="4"><label><input type="checkbox" data-field="user-status" data-column="4"> 排序号</label></li>
<li data-column="5"><label><input data-column="5" type="checkbox" data-field="user-status" value="4"> 操作</label>
</li>
</ul>

第二步:将jquery.dataTables表格列隐藏显示的操作封装成一个公用的function

//jTable为jquery.dataTables表格对象
//colNum为操作列的序号 为整形数字
function hidColumn(jTable, colNum) {
    var column = jTable.column(colNum);
    column.visible(!column.visible());
}

第二步:编写下拉li里面的点击事件

//通过jquery 查找到相应每个li  并注册其点击事件
 $("#" + tableDivId + " .dropdown-menu").find("li").click(function (e) {
 //由于列的隐藏与显示是由checkbox的true、false来控制的。所以点击时首先需要获取每行checkbox目前的选择状态
        var val = $(this).find(".hideColCheck").prop("checked");
        if (val == true) {
            //表示隐藏操作
            hidColumn(jTable, $(this).attr('data-column'));
        } else {
            //表示显示操作
            hidColumn(jTable, $(this).attr('data-column'));
        }
        //列操作后 需要将checkbox的值进行切换
        $(this).find(".hideColCheck").prop("checked", !val);
        //阻止事件冒泡 目的是不使下拉列表隐藏,如果不加这句话就会每点击一行,下拉列表就隐藏咯
        e.stopPropagation();
    })

第三步:编写checkbox的点击事件
写到第二步时,并不表示完成了封装,这样有个问题,点击checkbox的时候,你会发现列的显示、隐藏状态,跟checkbox的选中状态是不统一的。这是因为点击checkbox会触发状态的变化,同时checkbox又是li元素的子元素,这样会触发li注册的点击事件,这样就会导致checkbox的状态变化俩次,为了解决这问题,就只能将事件注册给checkbox然后阻止事件冒泡。函数的内容跟li的内容基本是一样的。

 $("#" + tableDivId + " .dropdown-menu").find(".hideColCheck").click(function (e) {
        e.stopPropagation();
        var val = $(this).prop("checked");
        if (val == true) {
            //表示隐藏操作
            hidColumn(jTable, $(this).attr('data-column'));
        } else {
            //表示显示操作
            hidColumn(jTable, $(this).attr('data-column'));
        }
    })
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值