使用jquery tablesorter过滤器按列的文本开头进行过滤

时间:2012-02-01 19:44:36

标签: jquery tablesorter

我希望能够使用tablesorter过滤器过滤一个姓氏列。过滤器只应与每个名称的第一个字符匹配。例如,假设您有以下三个名称:

吉尔伯特

巴金斯

戈弗雷

如果过滤文字只是“g”,我只想要这个结果:

吉尔伯特

戈弗雷

并不匹配Baggins中的任何一个。


在研究了.tablesorterFilter的源代码之后,我能够弄清楚如何去做。

您需要创建一个传递3个参数的函数。第一个参数是HTML元素的内容。第二个参数是用户键入过滤器容器的单词的字符串数组。第三个参数是区分大小写的布尔值。您在.tablesorterFilter filterFunction中传递对此函数的引用。我只是复制并粘贴了.tablesorterFilter的默认has_words函数并对其进行了修改以提供我正在寻找的功能。我将其命名为filterbyfirstcolumn,并将其作为filterFunction传递给它。

以下是我程序中相应的代码段:

        function filterbyfirstcolumn(str, words, caseSensitive) {
        var text = caseSensitive ? str : str.toLowerCase();

        var allwords = "";

        for (var i=0; i < words.length; i++) {
            allwords += words[i];

            if (i != words.length - 1)
                allwords += " ";
        }

        if (text.indexOf(allwords) != 0)
            return false;
        return true;
    }

    $("#tblSearchContacts")
.tablesorter({debug: false, widgets: ["zebra"], 
                headers: { 
                        0: { sorter: false }, 
                        4: { sorter: false }, 
                        5: { sorter: false },
                        6: { sorter: false }, 
                        7: { sorter: false }, 
                        8: { sorter: false } 
                       },
                       sortList: [[1,0]]})
.tablesorterPager({ container: $("#pagerOne"), positionFixed: false, size : 20 })
.tablesorterFilter({filterContainer: $("#txtFilter"),
                    filterClearContainer: $("#btnClear"),
                    filterColumns: [3],
                    filterCaseSensitive: false,
                    filterFunction: filterbyfirstcolumn});`

希望其他人可能觉得这很有用。使用类似的技术,您可以使用过滤器做各种简洁的事情。

1 个答案:

答案 0 :(得分:0)

我在github上有一个tablesorter插件的分支。我最近更新了我的filter widget以包含一个名为filter_startsWith的选项,该选项在单元格中的任何位置查找字母/数字之间进行切换。

可悲的是,目前,过滤器小部件与寻呼机插件的效果不佳,因此如果您同时需要它们,这可能对您无法解决。