我在页面上有一个工作搜索框。目标是隐藏与当前搜索字符串不匹配的任何LI项。但是,该列表是使用日历框架功能创建的,该功能还包括与我想要找到的场地名称相同的行上的城市信息。
<script type="text/javascript">
$(document).ready(function()
{
$("#search").keyup(function()
{
// capture the current user search input, and create a RegEx for comparison
var searchString = $.trim(this.value);
var searchRegEx = new RegExp(searchString, "ig");
// Begin evaluating the user input once the 3rd character is inputted
if(searchString.length < 3)
{
// Otherwise make sure all records are displayed
$('li').show();
}
else
{
// Hide all of the records
$('li').hide();
// Filter a list of records that match RegEx from user input, and then display
$('li').filter(function()
{
return this.innerHTML.match(searchRegEx);
}).show();
}
});
});
</script>
这是与INPUT TEXTBOX绑定的函数调用。下面是我想要显示/隐藏的示例。
<ul>
<li><a href="http://somewebsite/path/index.php?com=location&lID=154">American Royal</a> | <span>Kansas City</span>
</li>
<li><a href="http://somewebsite/path/index.php?com=location&lID=155">Ameristar Casino Hotel Kansas City</a> | <span>Kansas City</span>
</li>
</ul>
'Ameri'应该同时显示两者,而'American'只返回一个值。那些搜索字符串有用;然而,如果有人输入“堪萨斯”,它会显示两者而不仅仅是第二张唱片。
我已经成功捕获了A标记HTML,但匹配(searchRegEx)似乎没有像我预期的那样工作。
答案 0 :(得分:1)
你不需要正则表达式。你可以检查searchstring是否在另一个字符串中:
if (myString.indexOf("America") >= 0)
...
或者它是否应该不区分大小写
if (myString.toLowerCase().indexOf(mysearchstring.toLowerCase) >= 0) {
....
答案 1 :(得分:0)
您只能在a
代码中过滤哪些内容?请注意,this
应该$(this)
才能使用jQuery函数。 jQuery版innerHTML
为.html()
。
$('li').filter(function()
{
return $(this).find('a').first().html().match(searchRegEx);
}).show();
或者:
$('li').filter(function()
{
return $(this).children('a').first().html().match(searchRegEx);
}).show();