过滤字符串的起始值
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
来测试val
的存在 (~
操作符将-1
转换为0
,这是"假的",因此!~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()
(这意味着也要从返回语句中删除感叹号)
检查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();});
相关文章:
- 在 JavaScript 中使用正则表达式从字符串中过滤出百分比
- 从字符串 JavaScript 中过滤多个正则表达式
- 使用同位素插件,我可以按字符串名称过滤并使图像重叠吗?
- 过滤#标记后返回一个字符串数组
- 使用 jQuery/Javascript 过滤字符串
- Javascript:按字符串数组过滤对象数组
- 如何使用JavaScript(不是jQuery)从字符串中过滤前缀和修剪单词
- 如何在javaScript中过滤从特定字符开始到字符的字符串
- 从 jquery/javascript 中字符串的第一个字符过滤表数据
- 通过数组中的多个字符串进行角度过滤
- 使用 Javascript 过滤 json 字符串
- 解析/执行过滤具有许多选择选项的javascript字符串
- Javascript 通过匹配输入来过滤字符串
- 如何用另一个字符串数组过滤ng重复中的字符串数组
- backbone.js使用子字符串过滤集合
- 用lodash过滤两个字符串数组
- Javascript:使用dictionary从字符串中过滤单词
- 如何使用underscore.js通过字符串过滤对象数组
- 通过javascript的字符串过滤json字段
- 按子字符串过滤的结果错误