AJAX 实时搜索仅当结果以相同的第一个字母开头时才显示结果
AJAX Live Search showing results ONLY if it starts with the same first letter
我有一个ajax实时搜索栏,我使用这个w3school示例制作。 http://www.w3schools.com/php/php_ajax_livesearch.asp
如何让它只显示字母以第一个字母开头的相同顺序的结果,而不是匹配单词中的任何字母块。例如,要显示"计算机"作为结果,您必须键入"COM..."而不是"PUTER"。
我相信我已经把它缩小到这里的地方:
//get the q parameter from URL
$q=$_GET["q"];
//lookup all links from the xml file if length of q>0
if (strlen($q)>0)
{
$hint="";
for($i=0; $i<($x->length); $i++)
{
$y=$x->item($i)->getElementsByTagName('title');
$z=$x->item($i)->getElementsByTagName('url');
if ($y->item(0)->nodeType==1)
{
//find a link matching the search text
if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
{
if ($hint=="")
{
$hint="<a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
else
{
$hint=$hint . "<a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
}
}
}
}
检查搜索项目的条件语法:
//find a link matching the search text
if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))
这是在项目的任何部分进行搜索$q
,您要做的是仅在以$q
开头时才搜索,因此您必须更改语法:
if (strpos(strtolower($y->item(0)->childNodes->item(0)->nodeValue), strtolower($q)) === 0)
所以现在它将在开头搜索匹配项(位置 === 0)。您还注意到我在两个比较值中使用了strtolower()
,这是因为strpos()
区分大小写,而stristr()
不区分大小写。
您现在可以尝试更改此行并告诉我们它是否有效吗?
相关文章:
- 而循环只设置php中输入字段中的第一个值
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- RxJS油门行为;立即获取第一个值
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 选择多个实例中的第一个
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 看起来第一个console.log是'It’不太对
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 节点发布错误对象的第一个“属性”
- Javascript:表单验证getElementById仅返回第一个id元素
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - json结果显示第一个值
- 如何在angularjs中使用第一个api的结果,进入第二个api调用
- 为什么JavaScript结果总是返回第一个值
- 我的第一个AJAX脚本没有结果