jQuery 过滤结果 - 奇异匹配

标签 jquery filter contains

我正在使用 jQuery 来过滤表行并且它有效。

但我注意到它以一种非常具体的方式找到了不应该的匹配。

这是我的 jQuery:

$("#searchInput").keyup(function() {
    var rows = $(".rows").find('tr').hide();
    var data = this.value.split("/");
    $.each(data, function(i, v) {
        rows.filter(":Contains('" + v + "')").show();
    });
});

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
    return function(elem) {
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});

这是我的数据:

John Smith  4500
Mike Green  1234
David Brown 8542
ID5004  5004
Mal Smith   6532

如果我搜索 1234,我只会得到 1234。如果我搜索 4500,我会得到 4500 和 5004。

我认为问题是由于内部文本被读取并且匹配:

约翰·史密斯 4500

ID5004 5004

我仍然希望能够搜索所有字段,但是是否可以限制匹配,使其找不到这样的条目?

我创建了一个 fiddle 这表明了问题。

谢谢

最佳答案

问题出在 jQuery(elem).text() 上,它将两个 tr td 的文本连接在一起,没有空格。 您可以改为检查 tr 的每个 td。 https://jsfiddle.net/ktriek/bsef5bLj/6/

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
return function( elem ) {     
  var tds = jQuery(elem).find('td');
  return tds.eq(0).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0 ||
  tds.eq(1).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});

关于jQuery 过滤结果 - 奇异匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749983/

相关文章:

sql-server - 如何使用 Wireshark 过滤应用程序和数据库服务器之间的 SQL Server 流量?

filter - tcpdump 过滤器 src dst 端口

Python - 如果数组在其他数组的范围内

javascript - 根据 url 将事件类添加到 nav li?

javascript - 在轮播上滑动图像时出现奇怪的行为

django - django中是否有任何tile类型的概念

c# - DataSet 是否具有 Contain 或 In 功能?

java - 使用 Contains 方法过滤输入的多个不同行

javascript - 根据其内部元素动态更改 CSS

jquery - 使用 jquery ui 对话框确认表单提交操作