在jQuery中扩展和折叠表行

时间:2015-06-02 10:09:05

标签: javascript jquery html

以下是 jQuery code expanding and collapsing the rows in a table ,但它似乎无法正常工作。我在哪里出错了?

$('.Complex').click(function() {
    if ($(this).hasClass("collapsed")) {
        $(this).nextUntil('tr.Complex')
            .find('td')
            .parent()
            .find('td > div')
            .slideDown("fast", function() {
                var $set = $(this);
                $set.replaceWith($set.contents());
            });
        $(this).removeClass("collapsed");
    } else {
        $(this).nextUntil('tr.Complex')
            .find('td')
            .wrapInner('<div style="display: block;" />')
        $(this).addClass("collapsed");
    }.parent()
        .find('td > div')
        .slideUp("fast");
});

以下是 jsFiddle

https://jsfiddle.net/uxc3fkcm/

3 个答案:

答案 0 :(得分:3)

你过分复杂了。只需使用$.fn.toggleClass()$.fn.toggle()

即可
$('.Complex').click(function () {
    $(this).toggleClass("collapsed").nextUntil('tr.Complex').toggle();
});

DEMO

如果您想要滑动,请使用$.fn.slideToggle()代替$.fn.toggle()

  

以滑动方式显示或隐藏匹配的元素。

答案 1 :(得分:2)

你在if case之后写了.parent()并使用display none;而不是显示块;

$('.Complex').click(function(){
    if($(this).hasClass("collapsed")){
        $(this).nextUntil('tr.Complex')
        .find('td')
        .parent()
        .find('td > div')
        .slideDown("fast", function(){
            var $set = $(this);
            $set.replaceWith($set.contents());
        });
        $(this).removeClass("collapsed");
    }
    else 
    { 
      $(this).nextUntil('tr.Complex')
      .find('td')
      .wrapInner('<div style="display: none;" />')
      $(this).addClass("collapsed");
    } 
   }

答案 2 :(得分:0)

也许试试这个:D

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

 $(function () {
     $("td[colspan=3]").find("p").hide();
     $("table").click(function (event) {
         event.stopPropagation();
         var $target = $(event.target);
         $target.closest("tr").nextAll().find("p").slideToggle();

     });
 });

为我工作有希望为你工作2:D