我希望能够使用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});`
希望其他人可能觉得这很有用。使用类似的技术,您可以使用过滤器做各种简洁的事情。
答案 0 :(得分:0)
我在github上有一个tablesorter插件的分支。我最近更新了我的filter widget以包含一个名为filter_startsWith
的选项,该选项在单元格中的任何位置查找字母/数字之间进行切换。
可悲的是,目前,过滤器小部件与寻呼机插件的效果不佳,因此如果您同时需要它们,这可能对您无法解决。