0

我有一个使用这个 w3school 示例制作的 ajax 实时搜索栏。http://www.w3schools.com/php/php_ajax_livesearch.asp

我如何让它只显示以第一个字母开头的字母顺序相同的结果,而不是匹配单词中的任何字母块。例如,要显示“COMPUTER”作为结果,您必须键入“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>";
        }
      }
    }
  }
}
4

1 回答 1

0

检查搜索项目的条件语法:

//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()不是。

您现在可以尝试更改这条线并告诉我们它是否有效吗?

于 2013-11-08T11:32:49.467 回答