jquery tablesorter过滤器 - 如何计算过滤的行

时间:2011-11-22 11:25:47

标签: javascript jquery jquery-plugins tablesorter

我正在使用jQuery插件jquery-tablesorter-filter。它很棒。当我想要计算表被过滤后的行数时,我有问题。

$("#tblContainer").tablesorter({
    debug: false,
    sortList: [
        [0, 0]
    ],
    widgets: ['zebra']

}).tablesorterFilter({
    filterContainer: $("#filterBox"),
    filterColumns: [1, 2],
    filterCaseSensitive: false
});

这是计算过滤行(当前在屏幕上的行)的代码。但它没有给我正确的结果。它给出了过滤行的最后计数,而不是当前计数。它总是给出一个关键行程的结果。

$("#filterBox").keyup(function () {

    var textLength = $("#filterBox").val().length;

    if (textLength > 0) {

        var rowCount = $("#tblContainer tr:visible").length;

        $("#countCourseRow").html(" found " + rowCount);
    } else {
        $("#countCourseRow").html("");
    }

});

5 个答案:

答案 0 :(得分:7)

内置事件有什么问题:http://mottie.github.com/tablesorter/docs/example-option-show-processing.html

示例如下所示:

$("#tblContainer").tablesorter({
debug: false,
sortList: [
  [0, 0]
],
widgets: ['zebra']
}).bind('filterEnd', function() {
  $("#countCourseRow").html("");
  $("#countCourseRow").html("found " + $('#myTable tr:visible').length);
});

答案 1 :(得分:0)

只需编辑tablesorterFilter js文件即可添加回调函数:

在关闭return table;

doFilter()之前的第147行添加此内容
if (jQuery.isFunction(filter.callback)){
      filter.callback();
}

然后改变这个:

     this.defaults = {
        filterContainer: '#filter-box',
        filterClearContainer: '#filter-clear-button',
        filterColumns: null,
        filterCaseSensitive: false,
        filterWaitTime: 500,
        filterFunction: has_words,
        columns: []
      };

      this.defaults = {
        filterContainer: '#filter-box',
        filterClearContainer: '#filter-clear-button',
        filterColumns: null,
        filterCaseSensitive: false,
        filterWaitTime: 500,
        filterFunction: has_words,
        columns: [],
        callback: function(){}
      };

现在你只需要在这里定义你的回调函数

}).tablesorterFilter({
    filterContainer: $("#filterBox"),
    filterColumns: [1, 2],
    filterCaseSensitive: false,
    callback: function(){
         var rowCount = $("#tblContainer tr:visible").length;
         $("#countCourseRow").html(" found " + rowCount);
    }
});

这应该为你做:)

答案 2 :(得分:0)

您的脚本中可能存在逻辑错误,否则最简单的方法是获取可见行的长度。

 $('#table_id tr:visible').length

答案 3 :(得分:0)

这对我有用:

jQuery('table').data("rowCount", jQuery('#table_id tbody tr:visible').length);

然后,

 var rowCount = jQuery('table').data("rowCount");

答案 4 :(得分:0)

如果编写了这个可重用的 jQuery 函数,该函数应用 tablesorter 并在每个表下方添加一行,显示总行数和可见行数。它还在顶部添加了一个简短的帮助文本,链接到过滤器语法(实际上非​​常丰富和强大)。

props 是应用于 jQuery 选择器 selector 中指定的表的 tablesorter 属性。在其中添加所需的过滤选项(以及所有其他 tablesorter 选项/首选项)。

请注意,如果您想计算表中显示的数据项的数量,则按照其他一些答案的建议计算 tr 中的 table 数量,不会给您正确的号码。这将是一个多计数——最常见的是 2——因为它包括表格的原始标题行(如果存在)、任何页脚行以及由 tablesorter 动态添加到表格标题中的过滤器行。相反,计算 trtabletbody 的数量。

$ = jQuery

function sortTableFiltered( selector, props ) {
  let $table = $( selector );

  $table.before( '<div class="filterHelp" style="text-align:right; margin-bottom:-7px"><a href="https://mottie.github.io/tablesorter/docs/example-widget-filter.html" target="_blank">filter help</a></div>' );
  $table.after( '<div class="rowCount" style="margin-top:-12px; margin-bottom:1.5ex"><i><var class="visibleRows">x</var> of <var class="totalRows">y</var> rows visible</i></div>' );

  $table.tablesorter( props )
  .bind( 'filterEnd', function( e, filter ) { // update visible and total row count
     let $table = $( e.target );

     let $tbody = $table.find( 'tbody' );
     let totalRows   = $tbody.find( 'tr'         ).length;
     let visibleRows = $tbody.find( 'tr:visible' ).length;

     let $rowCount = $table.nextAll( '.rowCount' ).first();
     $rowCount.find( 'var.totalRows'   ).text( totalRows   );
     $rowCount.find( 'var.visibleRows' ).text( visibleRows );
  });