展开/折叠带有嵌套行的表行

2024-02-23

我想创建一个具有以下结构的表:
行 1 数据列 1 数据列 2 数据列 2
子行1 数据列1 数据列2 数据列2
子行2 数据列1 数据列2 数据列2
SubRow3 数据列1 数据列2 数据列2

我希望子行在单击时展开/折叠。我似乎无法让它与桌子一起使用。我知道列表是一个更好的选择,但表格更容易维护。

<tbody>
    <tr class="row1 head1">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr class="row1 head2 closed">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr class="row1 head3">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr class="row1 head4">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr class="row1 head5">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr class="row2 head1">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>

    <tr class="row2 head4">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr class="row2 head5">
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr>
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>
    <tr>
        <td>Cash and Equivalents</td>
        <td>000,000</td>
        <td>000,000</td>

    </tr>

</tbody>

单击行时,我调用以下函数:

holdingsTree: function(that){
    var stack = '',
        classes = ba.splitClasses(that.attr('class')),
        nextRow = ba.getClassNumber(classes[1], "head");

    if (that.next().hasClass('head'+nextRow)){
        if (that.next().hasClass(classes[0]) && that.next().hasClass('open')){
            that.nextUntil('.head1').hide().addClass('closed').removeClass('open');
        } else if (that.next().hasClass(classes[0])){
            stack = that.nextUntil('.head1');
            $.each(stack, function(i, item){ if ($(item).hasClass('head' + (nextRow))){ $(this).show().addClass('open').removeClass('closed'); } });
        }
    } else if (that.next().hasClass('head'+ (nextRow+1))){
        if (that.next().hasClass(classes[0]) && that.next().hasClass('open')){
            that.nextUntil('.head1').hide().addClass('closed').removeClass('open');
        } else if (that.next().hasClass(classes[0])){
            stack = that.nextUntil('.head1');
            $.each(stack, function(i, item){ if ($(item).hasClass('head' + (nextRow+1))){ $(this).show().addClass('open').removeClass('closed'); } });
        }
    } else if (that.next().hasClass('head'+ (nextRow+2))){
        if (that.next().hasClass(classes[0]) && that.next().hasClass('open')){
            that.nextUntil('.head1').hide().addClass('closed').removeClass('open');
            return;
        } else if (that.next().hasClass(classes[0])){
            stack = that.nextUntil('.head'+ (nextRow+3));
            $.each(stack, function(i, item){ if ($(item).hasClass('head' + (nextRow+2))){ $(this).show().addClass('open').removeClass('closed'); } });
            //stack.find('.head'+(nextRow+2)).show().addClass('open').removeClass('closed');
        }
    } else if (that.next().hasClass('head'+ (nextRow+3))){
        if (that.next().hasClass(classes[0]) && that.next().hasClass('open')){
            that.nextUntil('.head1').hide().addClass('closed').removeClass('open');
        } else if (that.next().hasClass(classes[0])){
            stack = that.nextUntil('.head1');
            $.each(stack, function(i, item){ if ($(item).hasClass('head' + (nextRow+3))){ $(this).show().addClass('open').removeClass('closed'); } });
        }
    } else if (that.next().hasClass('head'+ (nextRow+4))){
        if (that.next().hasClass(classes[0]) && that.next().hasClass('open')){
            that.nextUntil('.head1').hide().addClass('closed').removeClass('open');
        } else if (that.next().hasClass(classes[0])){
            that.nextUntil('.head1').show().addClass('open').removeClass('closed');
        }
    } 

},

splitClasses: function(names){
    var names = names.split(' ');
    return names;
},

getClassNumber: function(name, pretext){
    var result = name.split(pretext);
    console.log(parseInt(result[1]) + 1);
    return parseInt(result[1]) + 1;
}

这很糟糕。我知道。 :)


您可以为称为父行的行创建一个类,为称为子行的行创建一个类,并切换它们的显示。

就是这样:

$(document).ready(function() {

    function getChildren($row) {
        var children = [];
        while($row.next().hasClass('child')) {
             children.push($row.next());
             $row = $row.next();
        }            
        return children;
    }        

    $('.parent').on('click', function() {

        var children = getChildren($(this));
        $.each(children, function() {
            $(this).toggle();
        })
    });

})

检查这个小提琴以获取完整的运行代码http://jsfiddle.net/T8t2r/3/ http://jsfiddle.net/T8t2r/3/如果这解决了您的问题,请接受答案!

祝你好运!

编辑:要在更多级别上工作,一种方法是拥有级别属性。所以这是更新的版本,它应该适用于任意数量的级别。http://jsfiddle.net/T8t2r/9/ http://jsfiddle.net/T8t2r/9/

$(document).ready(function() {

    function getChildren($row) {
        var children = [], level = $row.attr('data-level');
        while($row.next().attr('data-level') > level) {
             children.push($row.next());
             $row = $row.next();
        }            
        return children;
    }        

    $('.parent').on('click', function() {

        var children = getChildren($(this));
        $.each(children, function() {
            $(this).toggle();
        })
    });

})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

展开/折叠带有嵌套行的表行 的相关文章

随机推荐

  • 什么是snakemake元数据文件?我什么时候可以删除那些?

    我注意到我的备份 rsync 脚本花费了相当多的时间从以下位置复制具有随机名称的内容 snakemake metadata文件夹 这些文件有什么用 在 Snakemake 运行完成后我可以安全地删除它们吗 或者它们对于 Snakemake
  • 从 jar 文件加载图像

    我有一个可以在 Netbeans IDE 中完美运行的应用程序 但是当从 dist 目录中的 jar 文件运行时 不会加载必要的图像 我花了 1 1 2 天阅读这个论坛和其他论坛 试图找到答案 但我无法让 jar 图像工作 这是我的代码的摘
  • C# 和 SQL Server 中的 DateTimeOffset 解析

    文档指出 NET 和 SQL Server 中的分辨率均为 100 纳秒 DateTimeOffset 值的时间部分以 100 纳秒为单位 称为刻度 进行测量 C 精度 100 纳秒 SQL服务器 然而 SQL 似乎删除了最后一位数字 例如
  • 循环内导入模块

    我有一个文件 我们称之为 foo py 它执行一些操作 包括通过串行端口发送一些数据并通过电子邮件发送返回的响应 我有另一个文件 看起来像这样 iteration 0 while True iteration 1 do some stuff
  • 在不使用外部 gem 的情况下将文件上传到 db Rails 3

    我有一个任务 我需要在 Rails 3 2 中上传一个文件 txt 而不使用任何外部 gem 来完成腿部工作 恐怕是不可协商的 该文件还需要保存到数据库中 我有以下代码 但是当我尝试使用表单上传 创建新附件时 它会返回错误 No route
  • 使用 --depth 1 进行浅层克隆、创建提交并再次拉取更新是否安全?

    The depth 1选项中git clone http git scm com docs git clone 创建一个shallow克隆历史记录被截断为指定数量的修订版 浅存储库有许多限制 您不能从中克隆或获取 也不能从其中推入或推入其中
  • 无法使用 JSF 2.0 重复标记的 varStatus 的“end”属性

    我正在使用repeatJSF 2 0 的标签用于循环对象列表并显示它们的一些属性 我想使用varStatus的属性repeat这样我就可以访问循环索引 最后一个列表项的编号 并判断是否已到达列表末尾 因此不会显示间隔符 我认为这会起作用
  • 安全的客户端脚本

    我有一个特殊的要求 其中一些关键算法必须在客户端脚本中处理 并且必须得到保护 使用 javascript 只会公开算法 我目前正在评估保护客户端脚本上的算法的方法 感谢任何建议和替代方法 我正在考虑的一个选择是将一个小小程序下载到本地 PC
  • 使用温莎城堡配置文件是否可以委托给另一个项目声明?

    使用 Castle Windsor 是否可以声明一个类型一次并将此声明用于多个 Id 而不是每次都完整地写出来 例如 我们有实现 IFoo 的 Widget 类 并且我们需要键 IFoo A 和 IFoo B 从 Castle 获取 Wid
  • CSS 优先级和针对特定元素

    我的问题应该很简单 出于某种原因 我今天无法理解它 我正在制作一个结构如下的菜单 div class wrapper ul li class menu item a href Menu Item a div class inner a hr
  • 如何实现index-core风格的索引状态monad?

    我试图理解中的索引单子index core http hackage haskell org package index core风格 我陷入了一个悖论 即在构建一些示例之前我无法理解原理 而在理解原理之前我无法构建示例 我正在尝试构建一个
  • 如何使 TAB 键关闭 TComboBox 而不丢失当前位置?

    我的表单上有一个 TComboBox 其 Style 属性设置为 csDropDownList 如果我打开下拉列表并使用鼠标或键盘选择一个选项并按 Enter 键 则下拉框将关闭 并且在触发 KeyPress 事件处理程序之前更改 Item
  • 使用 rmarkdown 在 pdf 中插入 GIF

    我正在使用 rmarkdown 生成 HTML 和 pdf 文件 在我的 Rmd 文件中 我包含了一个如下所示的 GIF www script gif 当我将其编织为 HTML 时 它工作正常 rmarkdown render docume
  • Xcode 10.3 中缺少模拟器[重复]

    这个问题在这里已经有答案了 更新到 Xcode 10 3 后 我发现我的一些模拟器丢失了 尝试从 窗口 gt 设备和模拟器 手动添加一个会产生错误 重新启动计算机对我有用
  • 媒体查询分组而不是多个分散的匹配媒体查询

    我正在尝试 LESS 不喜欢 SASS 语法 并一直试图找出用它进行媒体查询的最佳方法是什么 我通读了this http alwaystwisted com post php s 2012 05 05 everyday im bubblin
  • LD_LIBRARY_PATH:无法打开共享对象文件[重复]

    这个问题在这里已经有答案了 我的环境变量有问题LD LIBRARY PATH 当我运行我的垃圾箱时 我收到以下错误消息 bignum 加载共享库时出错 liballjoyn so 无法打开共享对象文件 没有这样的文件或目录 我将我的图书馆添
  • 在 flutter_local_notifications 中添加 mp3 声音

    如何在flutter local notification中添加自定义mp3声音 有添加自定义铃声的功能 但遗憾的是没有文档或示例 在android项目中添加raw文件夹 android gt app gt src gt main gt r
  • MSSQL 链接服务器错误:链接服务器的 OLE DB 提供程序“OraOLEDB.Oracle”为列提供了不一致的元数据

    我试图将数据从 Oracle 提取到MSSqlserver使用链接服务器的数据库 select from LINK NAME SCHEMA TABLE 但它失败并出现以下错误 链接服务器 LINK NAME 的 OLE DB 提供程序 Or
  • 我收到 AttributeError: 'HtmlResponse' object has no attribute 'xpath' in scrapy

    我是 scrapy 的新手 我正在使用Scrapy 0 14 4 我只想按照以下示例打印标题和链接 这是我的蜘蛛 from scrapy spider import BaseSpider class XxxSpider BaseSpider
  • 展开/折叠带有嵌套行的表行

    我想创建一个具有以下结构的表 行 1 数据列 1 数据列 2 数据列 2子行1 数据列1 数据列2 数据列2子行2 数据列1 数据列2 数据列2SubRow3 数据列1 数据列2 数据列2 我希望子行在单击时展开 折叠 我似乎无法让它与桌子