jquery搜索适用于一列而不是整个html表

时间:2014-10-04 09:14:26

标签: jquery

只是想使用jquery将搜索可能性添加到已加载的表中,但下面的代码仅适用于第一列。我想让它适用于所有细胞。你可以检查代码并帮我找出错误:

这是我的HTML代码:

<span id="search"></span>

这是我的js代码:

$("#search").on("keyup", function () {
    var value = $(this).text();

    $("table tr").each(function (index) {
        if (index != 0) {

            $row = $(this);

            $row.each(function () {

                var cell = $row.find("td").text();

                if (cell.indexOf(value) != 0) {
                    $(this).hide();
                } else {
                    $(this).show();
                }
            });
        }
    });
});

4 个答案:

答案 0 :(得分:2)

我不认为你需要做一个$ row.each,因为你已经在每一个中,而是在列上尝试每个:

$("#search").on("keyup", function () {
    var value = $(this).text();

    $("table tr").each(function (index) {
        if (index != 0) {

            $row = $(this);

            $row.find("td").each(function () {

                var cell = $(this).text();

                if (cell.indexOf(value) != 0) {
                    $(this).hide();
                } else {
                    $(this).show();
                }
            });
        }
    });
});

编辑:

http://jsfiddle.net/rn8dsnwm/2/

$("#search").keyup(function () {
    var value = $(this).val();

    if (value.length){
        $("table tr").each(function (index) {
            if (index != 0) {

                $row = $(this);

                $row.find("td").each(function () {

                var cell = $(this).text();

                if (cell.indexOf(value) < 0) {
                    $row.hide();
                } else {
                    $row.show();
                    return false; //Once it's shown you don't want to hide it on the next cell
            }

        });
    }
});
}
else{
    //if empty search text, show all rows
    $("table tr").show();

}
});

答案 1 :(得分:1)

我认为在尝试循环行的单元格时会遇到逻辑问题。

这应该有效:

$("#search").on("keyup", function () {
    var value = $(this).val();

    $("table tr:not(:first-of-type)").each(function (ix, el) {
        $row = $(this);
        $cells = $row.find('td');

        $cells.each(function (ix2, el2) {            
            var cell = $(this).text();

            $row.toggle(cell.indexOf(value) >= 0);
        });
    });
});

Demo

答案 2 :(得分:0)

对所有tr元素尝试这个:

var $rows = $('table 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();
});

查看示例http://jsfiddle.net/921dpr7a/

答案 3 :(得分:0)

Set shpTemp = ActiveSheet.Shapes(1)

Jsfiddle:http://jsfiddle.net/hq6mg5zb/