我想过滤列表而不区分大小写.我想只匹配不匹配大写或小写的字符.
> XXXXXXX
> yyyyyyy
> XXxxx
如果我在搜索框中输入“X”,它会同时显示1和3.我添加了下面的代码,但它也区分大小写.
<!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </script> <script> function filter(element) { var value = $(element).val(); $("#theList > li").each(function() { if ($(this).text().search(value) > -1) { $(this).show(); } else { $(this).hide(); } }); } </script> </head> <body> <input type="text" onkeyup="filter(this)" /> <ul id="theList"> <li>xxvxvxx</li> <li>yyyyyyyyyy</li> <li>rrrrrrrrrr</li> <li>vvvvvvvvvvv</li> <li>xcvcvdfsdf</li> <li>hkjhkhjkh</li> <li>xzfgfhfgh</li> </ul> </body> </html>
解决方法
您需要使用indexOf
$(this).text().search(value)
应该是
$(this).text().indexOf(value)
为什么要使用属性标记附加事件.这是一种不好的做法,应该避免.
您可以使用jQuery来附加事件.
$('input').keyup(function() { filter(this); }); function filter(element) { var value = $(element).val().toLowerCase(); $("#theList > li").each(function () { var $this = $(this),lower = $this.text; if (lower.indexOf(value) > -1) { $this.show(); } else { $this.hide(); } }); }
使用过滤器的功能相同一点
function filter(element) { var value = $(element).val().toLowerCase(); $("#theList > li").hide().filter(function() { return $(this).text().toLowerCase().indexOf(value) > -1; }).show(); }