如何在单击时隐藏表行

时间:2016-03-09 16:20:52

标签: javascript jquery html

我有一个SQL生成的表,用response.write写入html。该表有一些递归元素(子 - 父),每个新的递归级别通过使用增量类计数来获取该行(第一级获得class = 1,第二级获得class = 2,第三级获得class = 3)等等。)

默认情况下,我隐藏了所有不是level = 1的行,并且在用户单击以显示下一级别(切换)。这部分也很好用,但是如果你显示2级,那么显示3级,然后隐藏2级...... 3级仍然显示(这是不对的)。如果隐藏了子类,那么所有父类也应该隐藏。

我需要点击鼠标,如果切换一个类,则上升一个类并确保它被隐藏,并确保它上面的所有其他类(无论是否可见或隐藏),但仍然允许显示该父类。另外,我从不希望隐藏第1级。

这是我的jQuery,它不是很正确(不允许显示3级和更高级别)。有什么问题,或者我的代码应该是什么让它运作起来?我觉得我非常接近。我相信它切换到3级然后代码运行并隐藏它,不允许我看到3级或更高级别的任何东西。

$(document).ready(function () {
    $('#temp td').click(function () { 
        var clicked = $(this).text();
        var level = $(this).closest('tr').attr("class");
        $('tr[pn="' + clicked + '"]').toggle();

        var currentlevel = parseInt(level);    // on click sets recursion level to integer
        var nextlevel = currentlevel + 1; // on click sets recursion level to current level plus 1
        var maxlevel = parseInt($('.1').length - 3); // on click determines max level of recursion minus offset

        if (currentlevel > 1) { // skips this section if clicking on level 1
            if ($('.' + nextlevel + ':visible').length) { // checks if parents are visible
                for (nextlevel; nextlevel < maxlevel; nextlevel++) { // cycles through all parent classes above current level
                    $('.' + nextlevel).hide(); // sets parent to hide
                };
            };
        };
    });
});

1 个答案:

答案 0 :(得分:0)

搞定了。

$(document).ready(function () {
    $('#temp td').click(function () { 

        var clicked = $(this).text();
        var level = $(this).closest('tr').attr("class");
        $('tr[pn="' + clicked + '"]').toggle();

        var currentlevel = parseInt(level);
        var nextlevel = currentlevel + 1; 
        var maxlevel = parseInt($('.1').length - 3); 

        if ($('.' + nextlevel + ':visible').length) { 
        }else{
            for (nextlevel; nextlevel < maxlevel; nextlevel++) { 
                $('.' + nextlevel).hide(); 
            };
        };
    });
   });