【问题标题】:implement code folding for a report with jquery使用 jquery 实现报表的代码折叠
【发布时间】:2010-04-19 05:34:20
【问题描述】:

我正在尝试使用 jquery 折叠或展开表格行,并在第一列上显示 + 和 - 号。

<script type="text/javascript">                                         
$(document).ready(function() {

   $("tr.header").click(function () { 
      $("tr.child", $(this).parent()).slideToggle("fast");

   });


});

我正在尝试使用此代码。但我希望我单独单击的父母的孩子被切换。关于如何做到这一点的任何想法?

示例 HTML

<table>
    <tr class="header" >
         <td>1  </td>
        <td>line1</td>
    </tr>
    <tr class="child">
        <td>2</td>
        <td>line2</td>
    </tr>
    <tr class="child">
        <td>3</td>
        <td>line3</td>
    </tr>
  <tr class="header" >
         <td>4  </td>
        <td>line4</td>
    </tr>
    <tr class="child">
        <td>5</td>
        <td>line5</td>
    </tr>
    <tr class="child">
        <td>6</td>
        <td>line6</td>
    </tr>

</table>

编辑:我试图将 + 或 - 的图像放在与第 1 行、第 4 行相同的行中,并尝试在 java 脚本中获取它的句柄以在两个图像之间切换。有人可以帮我吗?

编辑 1:我可以在加载文档时折叠整个树吗?我是使用 XQuery 的初学者。

【问题讨论】:

    标签: javascript jquery folding


    【解决方案1】:

    (针对更改的代码)

    有两种方法:要么更改代码以仅切换单击的标题后面的行:

    $("tr.header").click(function () { 
      $(this).nextUntil(".header").slideToggle("fast");
    });
    

    或使用原始代码并将这些部分包装在 TBODY 中:

    <table>
      <tbody>
        <tr class="header" >
             <td>1  </td>
            <td>line1</td>
        </tr>
        <tr class="child">
            <td>2</td>
            <td>line2</td>
        </tr>
        <tr class="child">
            <td>3</td>
            <td>line3</td>
        </tr>
      </tbody>
      <tbody>
        <tr class="header" >
             <td>4  </td>
            <td>line4</td>
        </tr>
        <tr class="child">
            <td>5</td>
            <td>line5</td>
        </tr>
        <tr class="child">
            <td>6</td>
            <td>line6</td>
        </tr>
      </tbody>
    </table>
    

    【讨论】:

    • 非常感谢。我自己对 jquery 的了解很少。我会读的。
    • 你提到的第一种方法似乎不起作用。虽然我在其他地方看到过相同类型的代码,但它不适用于这种情况。
    • 我没试过,但看不到错误。你在使用 jQuery 1.4 吗? nextUntil 刚刚被添加。
    • 版本是问题所在。 :-) 再次感谢
    • :我试图将 + 或 - 的图像放在与第 1 行、第 4 行相同的行中,并尝试在 java 脚本中获取它的句柄以在两个图像之间切换。你能帮我吗?
    【解决方案2】:

    看看这个合并图像切换:

    Using JQuery to find the next table row

    我将它合并到 Umang 共享的代码中,这似乎可以切换 图像以及下面的行。

    $(document).ready(function() {

    //这将在初始页面加载时汇总行 $("tr.header").nextUntil(".header").slideToggle("fast", function () { }); //结束滑动切换

    //这将展开折叠行并切换+和-图像 $("tr.header").click(function () {

       $(this).nextUntil(".header").slideToggle("fast", function () { 
       }); //end slideToggle
    
       if ( ( $(this).hasClass('hidden') ) ) {
         $('img', this).attr("src", "plus.gif");
         $('img', this).attr("alt", "Click to expand row");
      } else {
         $('img', this).attr("src", "minus.gif");
         $('img', this).attr("alt", "Click to collapse row");
      }
    
       $(this).toggleClass('hidden');
       $(this).parent().next().toggle();
    

    }); //结束点击

    }); //结束文档.ready

    这是相关的 HTML,但您必须删除 img 标签周围的 HTML cmets 因为这只是为了防止 stackoverflow 认为我在发布实际图片。

    1 第1行 2 线2 3 第 3 行 4 第 4 行 5 第 5 行 6 第 6 行

    【讨论】:

    • 感谢您的回答。我使用设置 css 背景属性并切换它所属的类来实现。这个解决方案很优雅。
    【解决方案3】:

    您当前的代码会展开/折叠父行的子行。在您的示例中,它折叠了两个子行(data1、data2 和 data3、data4)

    你想在这里实现一些不同的东西吗?

    乌芒

    【讨论】:

    • 是的。我现在改变了我的代码。现在我应该以某种方式对它们进行分组,以便折叠仅适用于该组,而不适用于其他父母和孩子。
    猜你喜欢
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2016-10-26
    • 2010-11-08
    • 1970-01-01
    • 2011-11-01
    • 2017-03-10
    • 2020-09-01
    相关资源
    最近更新 更多