【问题标题】:Filtering on string starting value过滤字符串起始值
【发布时间】:2016-11-10 15:46:39
【问题描述】:

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

这就是我所拥有的:

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

【问题讨论】:

  • @jcuenod 完成!以前做不到,抱歉。

标签: javascript jquery html dom indexof


【解决方案1】:

您的代码做了什么:您正在使用indexOf 来测试val存在~ operator 正在将-1 转换为@987654327 @ 即"falsy"!~text.indexOf(val) 基本上是在测试val 是否在text 中的任何位置。

解决方案:只需检查indexOf 是否为0(换句话说,val 是从text 中的索引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()

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

【讨论】:

  • 这解决了我的问题!谢谢你的解释:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    是否可以与以下过滤器链接组合使用:A、、B、C?

    然后make下搜索输入&lt;a href="#A"&gt;

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

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

    【讨论】:

    • 感谢 Michał Perłakowski,但我如何才能与它建立联系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2020-05-21
    • 2022-01-16
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多