【发布时间】:2013-03-18 21:22:28
【问题描述】:
我遇到了一个我无法进一步思考的问题。
简而言之,我有一个ul 和数百个li,每个li 有几十个单词作为文本;在列表的最顶部,我放置了一个输入框,供用户输入一些关键字;例如,假设我想从那个巨大的列表中过滤掉同一行中存在以下三个单词的行:“red sweet strawberries”。点击搜索按钮后,这些行被过滤掉了,我只有两行包含我感兴趣的单词。
li1:“我迫不及待地想吃一些红甜草莓”
li2:“现在是夏天,红甜草莓现在很新鲜”
到目前为止一切都很好。
当三个查找的单词被字符串中的其他单词或字符分隔时,就会出现问题。 因此,以上面的示例为例,过滤器永远不会向我显示以下行:
li3:“红色和甜草莓现已上市”
所以,在这里我列出了过滤和整理上例中结果的整个函数:
$(document).ready(function() {
var links = new Array();
$("h4").each(function(index, element) {
links.push({
text: $(this).text(),
element: element
});
});
$("#searchbutton").click(function() {
var query = $("#inputtext").val();
var querywords = query.split(',');
var results = new Array();
for(var i = 0; i < querywords.length; i++) {
for(var j = 0; j < links.length; j++) {
if (links[j].text.toLowerCase().indexOf(querywords[i].toLowerCase()) > -1) {
results.push(links[j].element);
}
}
}
$("h4").each(function(index, element) {
this.style.display = 'none';
});
for(var i = 0; i < results.length; i++) {
results[i].style.display = 'block';
}
});
});
是否可以搜索多个子字符串并得到结果,即使子字符串之间用字符或其他单词分隔?
【问题讨论】:
-
在第一个for循环中
querytext不应该是querywords吗? -
是的,查询词。我已经更新了!在这个论坛上,我刚刚将所有“querytext”更改为“querywords”(在我的示例中强调单词的作用)并且我跳过了那个。谢谢。但这不是原因。
-
迈克M。我已经尝试过您的代码以适合我的功能,但不幸的是,由于我对 RegEx 语法的理解不佳,我无法使其工作。现在我正在学习这个 RegEx 的全部内容。再次感谢您的代码。
-
抱歉,我错过了在测试中使用代码时不需要的文本和元素属性查找。我已经更新了代码并添加了一个指向有效 JSFIDDLE 的链接。
标签: javascript regex indexof