1

我的实时搜索有问题,过滤工作正常,但我想要的只是<td>标签可以过滤,而<th>不是不属于。

这是我的html

<input />
 <table class="AvailableGroupLab availGrpLabs avalLabs">
    <tr>
        <th>Name</th>
        <th>Age</th>
    </tr>

    <tr>
        <td><span>wewe</span>

        </td>
        <td>16</td>
    </tr>
    <tr>
        <td><span>Melvin</span>

        </td>
        <td>18</td>
    </tr>
    <tr>
        <td><span>Marvin</span>

        </td>
        <td>20</td>
    </tr>
</table>

和 javascript

function filter(element) {
    var $trs = $('.AvailableGroupLab tr').hide();
    var regexp = new RegExp($(element).val(), 'i');

    var $valid = $trs.filter(function () {
        return regexp.test($(this).find('td:first-child').text())
    }).show();

    $trs.not($valid).hide()
}

$('input').on('keyup change', function () {
    filter(this);
})
4

6 回答 6

3

尝试这个:

function filter(element) {
var $trs = $('.AvailableGroupLab tr').not(":first").hide(); //don't hide first tr 
var regexp = new RegExp($(element).val(), 'i');

var $valid = $trs.filter(function () {
    return regexp.test($(this).find('td:first-child').text())
}).show();

$trs.not($valid).hide()
}

$('input').on('keyup change', function () {
    filter(this);
})

在这里提琴

于 2013-09-12T06:16:36.863 回答
3

我想你需要选择所有 tr 除了第一个使用:not(:first-child)

function filter(element) {
    var $trs = $('.AvailableGroupLab tr:not(:first-child)').hide();
    var regexp = new RegExp($(element).val(), 'i');

    var $valid = $trs.filter(function () {
        return regexp.test($(this).find('td:first-child').text())
    }).show();

    $trs.not($valid).hide()
}

$('input').on('keyup change', function () {
    filter(this);
})

检查这个http://jsfiddle.net/svHfj/3/

于 2013-09-12T06:17:30.657 回答
1

您可以使用tbodythead

演示:http: //jsfiddle.net/svHfj/2/

<table class="AvailableGroupLab availGrpLabs avalLabs">
    <thead>
        <tr>
            <th>Name</th>
            <th>Age</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td><span>wewe</span>

            </td>
            <td>16</td>
        </tr>
        <tr>
            <td><span>Melvin</span>

            </td>
            <td>18</td>
        </tr>
        <tr>
            <td><span>Marvin</span>

            </td>
            <td>20</td>
        </tr>
    </tbody>
</table>

和js

function filter(element) {
    var $trs = $('.AvailableGroupLab tbody tr').hide();
    var regexp = new RegExp($(element).val(), 'i');

    var $valid = $trs.filter(function () {
        return regexp.test($(this).find('td:first-child').text())
    }).show();

    $trs.not($valid).hide()
}

$('input').on('keyup change', function () {
    filter(this);
})
于 2013-09-12T06:16:38.347 回答
0

是您的问题的解决方案。

使用$('.AvailableGroupLab tr:not(:has(tr)):odd')而不是$('.AvailableGroupLab tr')

function filter(element) {
    var $trs = $('.AvailableGroupLab tr:not(:has(tr)):odd').hide();
    var regexp = new RegExp($(element).val(), 'i');

    var $valid = $trs.filter(function () {
        return regexp.test($(this).find('td:first-child').text())
    }).show();

    $trs.not($valid).hide()
}
于 2013-09-12T06:21:36.867 回答
0

改变这个

var $trs = $('.AvailableGroupLab td').hide();

例子

现在它不会过滤标题。

于 2013-09-12T06:19:08.157 回答
0

只需从选择器中删除元素

http://jsfiddle.net/svHfj/12/

function filter(element) {
    var $trs = $('.AvailableGroupLab tr');

    $trs.each(function() {
        if ( $(this).find('th').length) { // if th remove it
           $trs = $trs.not($(this));          
        }
    });

    $trs.hide();
    var regexp = new RegExp($(element).val(), 'i');

    // also you don't need filter
    $trs.each(function () {        
       if (!regexp.test($(this).find('td:first-child').text())) return;
       $(this).show();
    });
}

$('input').on('keyup change', function () {
    filter(this);
});
于 2013-09-12T06:39:22.153 回答