网格过滤仅过滤最后一列

时间:2013-05-25 12:18:43

标签: javascript jquery asp.net

我尝试使用此代码通过文本框过滤网格视图的所有列,但它只是过滤了网格的最后一列。我该怎么改变它?我的代码有什么问题?我的第一列是2,最后一列是4.我的for循环以2开始,以4结束,但是当我尝试这个“”(i = 2; i< 4; i ++)时,它显示我的索引为3的列。

 $(document).ready(function () {
        // Client Side Search (Autocomplete)
        // Get the search Key from the TextBox
        // Iterate through the 1st Column.
        // td:nth-child(1) - Filters only the 1st Column
        // If there is a match show the row [$(this).parent() gives the Row]
        // Else hide the row [$(this).parent() gives the Row]

        $('#filter').keyup(function (event) {
            var searchKey = $(this).val();
            for (i =2; i<5; i++) {
                $("#gvwHuman_ctl00 tr  td:nth-child(" + i + ")").each(function () {
                // $("#gvwHuman_ctl00 tr td:nth-child(" + i + ")").each(function () {
                    var cellText = $(this).text();
                    if (cellText.indexOf(searchKey) >= 0) {
                        $(this).parent().show();
                    } else {
                        $(this).parent().hide();
                    }
                });
            }
        });
    });

1 个答案:

答案 0 :(得分:1)

问题是对于行的每个单元格,您显示或隐藏该行。所以只有最后一个才重要。

你可以这样做:

       // 1 : hide all rows
       $("#gvwHuman_ctl00 tr").hide();

       // 2 : show the row if there is one match
       for (i =2; i<5; i++) {
            $("#gvwHuman_ctl00 tr  td:nth-child(" + i + ")").each(function () {
            // $("#gvwHuman_ctl00 tr td:nth-child(" + i + ")").each(function () {
                var cellText = $(this).text();
                if (cellText.indexOf(searchKey) >= 0) {
                    $(this).closest('tr').show();
                }
            });
        }