>source

지금 내 라이브 검색에 문자를 입력하면 해당 문자가 포함되어 있지만 시작되지 않은 결과가 표시됩니다. 입력 한 문자로 시작하는 결과 만 표시하려면 코드가 필요합니다. 결과가없는 경우 "제안 없음"이 표시되어야하지만 어떻게 든 작동하지 않습니다. 누구든지 고칠 수 있습니까?

function showResult(str) {
  if (str.length==0) {
    document.getElementById("livesearch").innerHTML="";
    document.getElementById("livesearch").style.border="0px";
    return;
  }
  var xmlhttp=new XMLHttpRequest();
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("livesearch").innerHTML=this.responseText;
      document.getElementById("livesearch").style.border="1px solid #A5ACB2";
    }
  }
  xmlhttp.open("GET","livesearch.php?q="+str,true);
  xmlhttp.send();
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<div id="sb">
<form>
<input type="text" placeholder="Type ..." onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</div>

<?php $xmlDoc=new DOMDocument(); $xmlDoc->load("links.xml");
$x=$xmlDoc->getElementsByTagName('link');
//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 . "<br /><a href='" .
          $z->item(0)->childNodes->item(0)->nodeValue .
          "' target='_blank'>" .
          $y->item(0)->childNodes->item(0)->nodeValue . "</a>";
        }
      }
    }   } }
// Set output to "no suggestion" if no hint was found // or to the correct values if ($hint=="") {   $response="no suggestion"; } else {  $response=$hint; }
//output the response echo $response; ?>


<pages>
<link>
<title>Example</title>
<url>https://www.w3schools.com/tags/tag_a.asp</url>
</link>
<link>
<title>Example</title>
<url>https://www.w3schools.com/tags/tag_br.asp</url>
</link>
</pages>


  • 답변 # 1

    항목을 검색하는 조건부 구문을 확인하십시오.

    //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() 그렇지 않습니다.

    이제이 줄을 변경하여 효과가 있는지 알려주시겠습니까?

관련 자료

  • 이전 javascript - 초당 임의의 본문 배경 색상
  • 다음 python - 열 이름에 공백 팬더가있는 경우 여러 열 삭제