如何在javascript中创建简单的搜索功能?

时间:2013-02-01 16:07:48

标签: javascript jquery

我从一些学校的一小部分开始,然后我想测试输入的值是否与这些学校中的一个匹配。 这是我到目前为止的代码:

    var $schools = [
     'University of Tennessee-Knoxville',
     'Maryville College',
     'Cleveland State Community College',
     'East Tennessee State University'
    ];   
    var $searchBar = $('input.searchBar');
    $searchBar.keyup(function(){
         var $searchValue = $searchBar.val();
         for (var x = 0; x < $schools.length; x++) {
             var $schoolLC = $schools[x].toLowerCase();
             var $searchLC = $searchValue.toLowerCase();
             var $searchingValue = new RegExp('.*' + $searchLC + '.*');
             if ($schoolLC.match($searchingValue)) {
                 console.log($searchLC);
             }
         }
     });

但有些事情显然是错误的(我相信我的RegExp),因为它永远不会在console.logs中找到$ searchLC。

非常感谢!!

4 个答案:

答案 0 :(得分:2)

不是这个

if ($searchLC.match($searchingValue)) {

应该是

if ($schoolLC.match($searchingValue)) {

答案 1 :(得分:1)

我认为你需要逃避所有RegEx特殊字符:

function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}

...
var $searchingValue = new RegExp('.*' + escapeRegExp($searchLC) + '.*');
...

答案 2 :(得分:1)

试试这个:Live Demo

for (var x = 0; x < $schools.length; x++) {
    var $schoolLC = $schools[x].toLowerCase();
    var $searchLC = $searchValue.toLowerCase();
    var $searchingValue = new RegExp('.*' + $searchLC + '.*');
    if ($schoolLC.match($searchingValue)) {
        alert($schoolLC);
    }
}

答案 3 :(得分:1)

嗯,对于这个特定的例子,您可以使用indexOf代替使用匹配,以便您的代码变为

var $schools = [
 'University of Tennessee-Knoxville',
 'Maryville College',
 'Cleveland State Community College',
 'East Tennessee State University'
];   
var $searchBar = $('input.searchBar');
$searchBar.keyup(function(){
     var $searchValue = $searchBar.val();
     for (var x = 0; x < $schools.length; x++) {
         var $schoolLC = $schools[x].toLowerCase();
         var $searchLC = $searchValue.toLowerCase();
         if ($schoolLC.indexOf($searchLC) >= 0) {
             console.log($searchLC);
         }
     }
 });