过滤字符串的起始值

Filtering on string starting value

本文关键字:字符串 过滤      更新时间:2023-09-26

我有一个搜索栏来显示包含特定值的单元格的行,但我只想要那些以该值开始的行,只有当它们以它开始时,而不是如果它们包含在字符串的中间。

这是我的:

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来测试val存在 (~操作符将-1转换为0,这是"假的",因此!~text.indexOf(val)基本上是测试val是否在text中的任何地方)。

解决方案:仅检查indexOf是否为0(换句话说,valtext的索引0开始):

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()

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

检查indexOf()的结果是否等于0。用text.indexOf(val) !== 0代替!~text.indexOf(val)

是否有可能与过滤器链接的组合一起使用:a,, B, C?

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

开始过滤这个"word"?

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();});