0

我尝试使用此代码通过文本框过滤网格视图的所有列,但它只过滤网格的最后一列。我怎样才能改变它?我的代码有什么问题?我的第一列是 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();
                    }
                });
            }
        });
    });
4

1 回答 1

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();
                }
            });
        }
于 2013-05-25T12:22:46.590 回答