0

我有一个使用 php 动态填充的表。我想为它添加搜索功能。在 stackoverflow 上搜索了类似的问题后,我找到了一个我尝试过的 JS 片段。

var $rows = $('#existing tr');
$('#search').keyup(function() {
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();

    $rows.show().filter(function() {
        var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
        return !~text.indexOf(val);
    }).hide();
});

jsfiddle 链接:http: //jsfiddle.net/kvkBw/3/

问题是,当我输入任何搜索词时,表格本身会被隐藏(变得不可见),任何帮助将不胜感激,谢谢!

请注意,删除 php 代码是因为 jsfiddle 不支持 php 并且还增加了可读性

4

3 回答 3

3

首先,你的函数搜索是错误的,什么是!~,为什么你试图隐藏你找到的所有出现?

试试这个:

var $rows = $('#existing tbody tr:not(:first)'); // this is the reason for table                        hidding like @drizzie says

$('#search').keyup(function () {
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();

    $rows.hide().filter(function () {
        var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();

        return text.indexOf(val) != -1 ;
    }).show();
});

但最好看看 DEMO

于 2013-10-29T20:30:47.017 回答
0

最后删除 .hide() ,这就是导致您的问题的原因。

同时删除!在返回值的开头。

   $rows.show().filter(function () {
        var text = $(this).text().replace(/\s+/g, ' ').toLowerCase();
        return text.indexOf(val);
    });
于 2013-10-29T20:03:56.697 回答
0

您正在隐藏第一行和第二行。将您的行选择器更改为

var $rows = $('#existing tbody tr:not(:first)');

这消除了您的标题行和您的过滤器行。

于 2013-10-29T20:11:53.133 回答