过滤字符串起始值
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
开始于索引 0
在 text
):
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();});
我有一个搜索栏来显示包含特定值的单元格的行,但我只想要以该值开头的行,前提是它们以它开头,而不是中间包含它的字符串。
这是我的:
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
开始于索引 0
在 text
):
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();});