如何使用jQuery在单击按钮上显示另外5行表

时间:2013-06-22 19:11:33

标签: jquery hide show

我预先加载一个包含所有行的表。但是,我只想显示<tbody>标记内的前10行,现在只显示表格中的每个<tr>

所以这就是我到目前为止所做的:

var trs =  $("#internalActivities > table > tbody > tr");
trs.hide();
trs.slice(0, 9).show(); 

$("#seeMoreRecords").click(function (e) { 
    e.preventDefault();
    $("#internalActivities tr:hidden").slice(0, 10).show();          
});

$("#seeLessRecords").click(function (e) { 
    e.preventDefault();
    $("#internalActivities tr").slice(9, 19).hide();          
});

上面代码的问题是:

  1. 仅使用<tr>标记查找<tbody>
  2. 看不到按钮需要从下往上删除10行而不是全部。
  3. 如果显示所有按钮,我需要隐藏按钮seeMoreRecords
  4. 如果显示最小行,则隐藏seeLessRecords按钮。
  5. 最后看我的脚本默认显示10行,如果用户点击查看更多,那么你会看到10行。所以它一次增加10,一旦你达到最大值,然后隐藏看到更多按钮。只有在显示的行数超过10行时才能看到更少的内容。

2 个答案:

答案 0 :(得分:11)

  1. 您可以使用选择器$("#internalActivities tr")来选择所有<tr>,无论<tbody>是否

  2. 您需要将当前显示的索引保存在单独的变量中,或根据选择的元素数量计算当前索引(使用.length属性)

  3. 检查显示的元素的当前计数并显示/隐藏相应的按钮。

  4. 实施例

    HTML

    <table id="internalActivities">
    
    </table>
    <input type="button" id="seeMoreRecords" value="More">
    <input type="button" id="seeLessRecords" value="Less">
    
    的Javascript
    for (var i=0;i<21;i++) {
        $('#internalActivities').append('<tr><td>my data</td></tr>');
    }
    
    var trs = $("#internalActivities tr");
    var btnMore = $("#seeMoreRecords");
    var btnLess = $("#seeLessRecords");
    var trsLength = trs.length;
    var currentIndex = 10;
    
    trs.hide();
    trs.slice(0, 10).show(); 
    checkButton();
    
    btnMore.click(function (e) { 
        e.preventDefault();
        $("#internalActivities tr").slice(currentIndex, currentIndex + 10).show();
        currentIndex += 10;
        checkButton();
    });
    
    btnLess.click(function (e) { 
        e.preventDefault();
        $("#internalActivities tr").slice(currentIndex - 10, currentIndex).hide();          
        currentIndex -= 10;
        checkButton();
    });
    
    function checkButton() {
        var currentLength = $("#internalActivities tr:visible").length;
    
        if (currentLength >= trsLength) {
            btnMore.hide();            
        } else {
            btnMore.show();   
        }
    
        if (trsLength > 10 && currentLength > 10) {
            btnLess.show();
        } else {
            btnLess.hide();
        }
    
    }
    

    我创建了jsFiddle demo以查看此操作。

答案 1 :(得分:0)

1)如果你不仅需要使用tbody标签的tr标签,那么将jquery select重写为

$("#internalActivities > table tr");

2)您可以获取行数并在切片中使用该计数

var $records = $("#internalActivities tr");
$records.slice($records.length - 10, $records.length).hide();

3)检查seeMoreRecords单击事件处理程序中隐藏行的计数

if ($("#internalActivities tr:hidden").length === 0) {
    $("#seeMoreRecords").hide();
}

4)检查显示的行数

if ($("#internalActivities tr").not(":hidden").length <= 10) {
    $("#seeLessRecords").hide();
}