过滤字符串起始值

Filtering on string starting value

我有一个搜索栏来显示包含特定值的单元格的行,但我只想要以该值开头的行,前提是它们以它开头,而不是中间包含它的字符串。

这是我的:

var $rows = $('#tableID tbody tr');

$('#search').keyup(function() {
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();

    $rows.show().filter(function() {
        var text = $('.filterClass', this).text().replace(/\s+/g, ' ').toLowerCase();
        return !~text.indexOf(val);
    }).hide();
});

只需检查 indexOf() 的结果是否等于 0。而不是 !~text.indexOf(val) 使用 text.indexOf(val) !== 0.

您的代码的作用: 您正在使用 indexOf 来测试 存在 val~ operator is converting -1 to 0 which is "falsy"!~text.indexOf(val) 基本上是在测试 val 是否在 text 中的任何位置)。

解决方案: 只需检查 indexOf 是否为 0(换句话说,val 开始于索引 0text):

var $rows = $('#tableID tbody tr');

$('#search').keyup(function() {
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase();

    $rows.show().filter(function() {
        var text = $('.filterClass', this).text().replace(/\s+/g, ' ').toLowerCase();
        return text.indexOf(val) !== 0;     // <-- Note this line
    }).hide();
});

旁注: 理解“只显示这样的行”的代码比理解“隐藏所有不是这样的行”。我建议像这样更改代码的结构:

 $rows.hide()
 $rows.filter(/* your filter code */).show()

(这意味着也从 return 语句中删除感叹号)

是否可以与过滤器 link 组合使用,例如:A, B, C?

然后在搜索下输入<a href="#A">

然后开始过滤这个“词”?

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