2017-03-04 30 views
0

目前我有一个函数可以根据输入过滤我的列表,但它只会尝试与第一个字母匹配,而不是在任何地方查找输入文本。例如,我的意思是当用户键入“Eng”时,它将与“England”匹配,并删除其他人,这很好,但是如果用户输入“land”,则不会显示匹配的所有国家/地区名单中有“土地”的名单。在任何地方包含搜索词的过滤器元素

$(function() { 
    $("input").keyup(function() { 
     var val = $(this).val(); 
     $("ul li").show().filter(function() { 
      return $(this).text().toLowerCase().trim().indexOf(val); 
     }).hide(); 
    }); 
}); 

JSFiddle显示什么我目前使用:

+2

只需添加['=== -1'(https://jsfiddle.net/w7hb44w0/ 1 /)在'filter()'条件下。 – Tushar

回答

1

尝试是这样的

$(function() { 
    $("input").keyup(function() { 
    var val = $(this).val(); 
    $("ul li").show().filter(function() { 
     if($(this).text().toLowerCase().trim().indexOf(val) > -1){ 
      return 0; 
     } 
     return 1; 
    }).hide(); 
    }); 
}); 

https://jsfiddle.net/zwLsackq/1/

0

如果您正在使用再取:contains优势。该方法将返回包含所有匹配元素的jQuery对象。

$(function() { 
 
    $("input").keyup(function() { 
 
    var val = $(this).val(); 
 
    $("ul > li").hide(); 
 
    $("ul > li:contains('" + val + "')").show(); 
 
    }); 
 
});
input { 
 
    padding: 5px; 
 
    margin: 0 5px; 
 
} 
 

 
ul { 
 
    margin: 10px 0 0; 
 
} 
 

 
li { 
 
    display: none; 
 
}
<script src="https://code.jquery.com/jquery-2.2.4.js"></script> 
 
<input type="text" id="inp" /> 
 
<ul> 
 
    <li>England</li> 
 
    <li>Wales</li> 
 
    <li>Scotland</li> 
 
    <li>Ireland</li> 
 
</ul>

相关问题