使用输入过滤表行

时间:2013-06-27 21:16:06

标签: jquery filter

在查看了其他一些有关此问题的SO之后,我仍然无法弄清楚如何在我的案例中使用它。我有一个包含几行的表和一个上面的输入控件,我需要根据键入的内容进行过滤。每行都有一个删除按钮,我没有在我的jsFiddle中连接。这在我的真实页面上运行良好。

我的主要问题是过滤器本身。它肯定没有正确过滤,我不知道如何考虑删除按钮。当我开始输入过滤器时,我需要做什么,按钮文本(“删除”)将被忽略,行将正确过滤?

这是一个半工作的 jsFiddle 和“半工作”我的意思是,如果你输入字母'r',所有内容都会被过滤但只有一行。你输入的大多数其他信件都被过滤掉了。

过滤代码

<script>
$("#searchFilter").keyup(function () {
    var data = this.value.split(" ");
    var tbl = $("#table1").find("tr");
    if (this.value == "") {
        tbl.show();
        return;
    }
    tbl.hide();
    tbl.filter(function (i, v) {
        var t = $(this);
        for (var d = 0; d < data.length; d++) {
            if (t.is(":contains('" + data[d] + "')")) {
                return true;
            }
        }
        return false;
    }).show();
});
</script>


感谢这篇文章,我得到了一点开始,但现在只是卡住......:https://stackoverflow.com/a/17075148/738262



工作代码

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

$("#searchFilter").keyup(function () {
    var data = this.value.split(" ");
    var tbl = $("#table1").find("tr");
    if (this.value == "") {
        tbl.show();
        return;
    }
    tbl.hide();
    tbl.filter(function (i, v) {
        var t = $(this);
        for (var d = 0; d < data.length; d++) {
            if (t.is(":Contains('" + data[d] + "')")) {
                return true;
            }
        }
        return false;
    }).show();
});

1 个答案:

答案 0 :(得分:3)

:contains 区分大小写。当您输入r时,它找不到Running,只有Bar

同样在for循环中应该是d++