我有PHP生成的表,通常一次超过10个。我想使用一个搜索字段来查找与所有表中的输入匹配的行,并仅显示那些行,但是如果表中没有此类行,那么我希望该表隐藏。

我在这里找到了一个很接近的答案https://stackoverflow.com/a/16127730/3435158,这对于隐藏没有匹配行的表非常有用-但是,使用他的代码,与搜索输入匹配的整个表保持可见,我只希望匹配的行可见,而不是整个行表。



编辑:http://jsfiddle.net/jrfUM/113/

我想做的是,如果我在搜索字段中输入“ andrew”,我想得到(希望我现在更加清楚):

+---------+
| table 1 |
+---------+
| Andrew  |
+---------+

+---------+
| table 4 |
+---------+
| Andrew  |
+---------+

最佳答案

我设法编辑PSL code并使它可以满足我的需要:http://jsfiddle.net/jrfUM/115/

<input type="text" id="search" />
<table class="tblDetails">
    <thead>
        <tr><th>Table 1</th></tr>
    </thead>
    <tbody>
        <tr><td>Andrew</td></tr>
        <tr><td>John</td></tr>
    </tbody>
</table>
<table class="tblDetails">
    <thead>
        <tr><th>Table 2</th></tr>
    </thead>
    <tbody>
        <tr><td>Jack</td></tr>
        <tr><td>Marc</td></tr>
    </tbody>
 ....




$("#search").keyup(function () {
    var txtVal = $(this).val();
    if (txtVal != "") {
        $(".tblDetails").show();
        $(".message").remove();
        $.each($('.tblDetails'), function (i, o) {
            var match = $("td:contains-ci('" + txtVal + "')", this);
            match.parent().siblings().hide();                       //  <<=== [LINE ADD]
            if (match.length > 0) $(match).parent("tr").show();
            else $(this).hide();
        });
    } else {
        // When there is no input or clean again, show everything back
        $("tbody > tr", this).show();
    }
    if($('.tblDetails:visible').length == 0)
    {
        $('#search').after('<p class="message">Sorry No results found!!!</p>');
    }
});

// jQuery expression for case-insensitive filter
$.extend($.expr[":"], {
    "contains-ci": function (elem, i, match, array) {
        return (elem.textContent || elem.innerText || $(elem).text() || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
    }
});

关于javascript - 使用一个搜索字段通过多个表搜索/过滤行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32435494/

10-14 14:56
查看更多