jquery实现自定义树形表格的方法【自定义树形结构table】


Posted in jQuery onJuly 12, 2019

本文实例讲述了jquery实现自定义树形表格的方法。分享给大家供大家参考,具体如下:

话不多说,直接上代码(本代码仅提供思路):

function createTables(data, t, p) {
    $("#datatable" + t + ' tbody').empty();
    var count = data.length;
    var html = '';
    if (count > 0) {
      for (var i = 0; i < count; i++) {
        var btn = '';
        if(data[i]._child && data[i]._child.length > 0){
          btn = '<i class="layui-icon mt-icon" style="cursor: pointer" data-tid="'+ data[i].category_id +'-'+ data[i].id +'-'+ t +'" data-pid="'+ data[i].category_id +'-'+ data[i].pid +'-'+ t +'"></i> ';
        }else{
          btn = '<i class="mt-icon" style="cursor: pointer" data-tid="'+ data[i].category_id +'-'+ data[i].id +'" data-pid="'+data[i].category_id +'-'+ data[i].pid+'"></i> ';
        }
        html += '<tr style="">' +
          '<td style="text-align: left">'+btn + data[i].name + '(' + data[i].title + ')' + '</td>' +
          '<td>' + (data[i].source_name ? data[i].source_name : '') + '</td>' +
          '<td>' + data[i].show_time + '</td>' +
          '<td>' + dataFormat(data[i].current_record, data[i].unit) + '</td>' +
          '<td>' + dataFormat(data[i].prev_record, data[i].unit) + '</td>' +
          '<td>' + dataFormat(data[i].last_record, data[i].unit) + '</td>' +
          '<td>' + dataFormat(data[i].budget, data[i].unit) + '</td>' +
          '<td>' + dataFormat(data[i].budget_rate, '%') + '</td>' +
          '<td>' + dataFormat(data[i].record_rate) + '</td>' +
          '<td>' + dataFormat(data[i].mom, '%') + '</td>' +
          '<td>' + dataFormat(data[i].yoy, '%') + '</td>' +
          '<td><i class="layui-icon" style="cursor: pointer" onclick="showHiddenArea(this,' + data[i].category_id + ',' + data[i].data_structure_id + ',' + data[i].time_unit + ',' + t + ');"></i></td> ' +
          '</tr>';
        if(data[i]._child && data[i]._child.length > 0){
          html = createNewTable(data[i]._child,html,1,t);
        }
      }
    } else {
      html = '<tr><td colspan="12" style="text-align: center"> 暂无数据 </td></tr>';
    }
    $("#datatable" + t + ' tbody').html(html); // 插入的表格
    initTreeAction(t); // 结构初始化
}
function createNewTable(data,html,y,t)
{
    var counts = data.length;
    var num = ++y;
    for (var i = 0; i < counts; i++) {
      var btn = '';
      var css = '';
      css = 'text-indent:'+ (num * 20) +'px;';
      if(data[i]._child && data[i]._child.length > 0){
        css = 'text-indent:'+ (num==2?20:(num-1) * 20) +'px;';
        btn = '<i class="layui-icon mt-icon" style="cursor: pointer" data-tid="'+ data[i].category_id +'-'+ data[i].id +'-'+ t +'" data-pid="'+data[i].category_id +'-'+ data[i].pid+'-'+ t +'" data-type="dir"></i> ';
      }else{
        btn = '<i class="mt-icon" style="cursor: pointer" data-tid="'+ data[i].category_id +'-'+ data[i].id +'-'+ t +'" data-pid="'+data[i].category_id +'-'+ data[i].pid +'-'+ t +'" data-type="file"></i> ';
      }
      html += '<tr style="display: none">' +
        '<td style="text-align: left; '+ css +'">'+ btn + data[i].name + '(' + data[i].title + ')' + '</td>' +
        '<td>' + (data[i].source_name ? data[i].source_name : '') + '</td>' +
        '<td>' + data[i].show_time + '</td>' +
        '<td>' + dataFormat(data[i].current_record, data[i].unit) + '</td>' +
        '<td>' + dataFormat(data[i].prev_record, data[i].unit) + '</td>' +
        '<td>' + dataFormat(data[i].last_record, data[i].unit) + '</td>' +
        '<td>' + dataFormat(data[i].budget, data[i].unit) + '</td>' +
        '<td>' + dataFormat(data[i].budget_rate, '%') + '</td>' +
        '<td>' + dataFormat(data[i].record_rate) + '</td>' +
        '<td>' + dataFormat(data[i].mom, '%') + '</td>' +
        '<td>' + dataFormat(data[i].yoy, '%') + '</td>' +
        '<td><i class="layui-icon" style="cursor: pointer" onclick="showHiddenArea(this,' + data[i].category_id + ',' + data[i].data_structure_id + ',' + data[i].time_unit + ',' + t + ');"></i></td> ' +
        '</tr>';
      if(data[i]._child && data[i]._child.length > 0){
        html = createNewTable(data[i]._child,html,num,t);
      }
    }
    return html;
}
function showLowData(obj)
{
    var mId = $(obj).attr('data-tid');
    var isOpen = $(obj).hasClass('open');
    if (isOpen) {
      $(obj).removeClass('open');
      if($(obj).hasClass('layui-icon')){
        $(obj).html('');
      }
    } else {
      $(obj).addClass('open');
      if($(obj).hasClass('layui-icon')){
        $(obj).html('');
      }
    }
    $(obj).parents('tbody').find('tr').each(function () {
      var mt = $(this).find('.mt-icon');
      var pid = mt.attr('data-pid');
      var Open = mt.hasClass('open');
      var type = mt.attr('data-type');
      if (mId == pid) {
        if (isOpen) {
          $(this).hide();
          if (type == 'dir' && Open == isOpen) {
            mt.trigger('click');
          }
        } else {
          $(this).show();
        }
      }
    });
}

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
jQuery插件之validation插件
Mar 29 jQuery
Jquery-data的三种用法
Apr 18 jQuery
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
Jun 09 jQuery
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
bootstrap可编辑下拉框jquery.editable-select
Oct 12 jQuery
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
Dec 18 jQuery
jquery自定义显示消息数量
Dec 19 jQuery
jquery ajax加载数据前台渲染方式 不用for遍历的方法
Aug 09 jQuery
使用JQuery自动完成插件Auto Complete详解
Jun 18 jQuery
layui+jquery支持IE8的表格分页方法
Sep 28 jQuery
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
Jul 11 #jQuery
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
Jul 10 #jQuery
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 #jQuery
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 #jQuery
jquery多级树形下拉菜单的实例代码
Jul 09 #jQuery
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 #jQuery
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 #jQuery
You might like
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
PHP实现图片压缩
2020/09/09 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
js自定义事件代码说明
2011/01/31 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python字符串替换re.sub()实例解析
2020/02/09 Python
如何开发一个JQuery插件
2016/07/28 面试题
车间班组长岗位职责
2013/11/13 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
秋季运动会活动方案
2014/02/05 职场文书
开门红主持词
2014/04/02 职场文书
群众路线表态发言材料
2014/10/17 职场文书
简历自荐信范文
2015/03/09 职场文书
太空授课观后感
2015/06/17 职场文书