2012-05-01 3 views
0

XML에로드 된 입력 소스에서 페이지에 표시된 현재 정보를 검색하는 코드가 있습니다. 그러면 단어가 몇 번 발견되었는지, 현재 모든 행을 표시하고 있지만 단어가 발견 된 행을 표시해야합니다. 코드는jquery를 사용하여 검색에서 일치하는 행 표시

function searchResults(query) { 
    var temp = "\\b" + query + "\\b"; 
    var regex_query = new RegExp(temp, "gi"); 
    var currentLine; 
    var num_matching_lines = 0; 
    $("#mainOutput").empty(); 
    $("LINE", g_playDOM).each(
      function() { 
       currentLine = $(this).text(); 
       matchesLine = currentLine.replace(regex_query, 
         '<span class="query_match">' + query + '</span>'); 

       if (currentLine.search(regex_query) > 0) 
        num_matching_lines++; 
       $("#mainOutput").append("<p>" + matchesLine + "</p>"); 
      }); 
    $("#sideInfo").append(
      "<p>Found " + query + " in " + num_matching_lines + " lines</p>"); 
} 

$(document).ready(function() { 

    loadPlay(); 

    $("#term_search").focus(function(event) { 
     $(this).val(""); 
    }); 

    $("#term_search").keypress(function(event) { 
     if (event.keyCode == 13) 
      searchResults($("#term_search").val()); 
    }); 

    $('#term-search-btn').click(function() { 
     searchResults($("#term_search").val()); 
    }); 
}); 
</script> 

입니다. 현재 단어가있는 줄 수는 올바르게 표시됩니다.

+1

바이올린 좋을 수 있습니다. – gdoron

답변

0

조건부 내에서 코드 줄을 실행하려면 주위에 중괄호를 배치해야합니다. 그렇지 않으면 바로 다음 작업 항목 만 실행됩니다. 귀하의 경우 일치하는 행 수를 늘리십시오.

발견 된 행을 DOM에 추가하는 작업은 if 문이 이미 완료 되었기 때문에 모든 분기에서 실행됩니다. 아래 잘못된 라인 : 고정

if (currentLine.search(regex_query) > 0) num_matching_lines++; 
    $("#mainOutput").append("<p>" + matchesLine + "</p>"); 

는 :

if (currentLine.search(regex_query) > 0) { 
    num_matching_lines++; 
    $("#mainOutput").append("<p>" + matchesLine + "</p>"); 
} 
+0

나는 이것을 바꿔서 "matchesLine"대신에 모든 라인을 보여주고있다. 왜 이런 일이 일어날 지, 내가 이것을 고칠 수있는 이유는 무엇인가? – user1354895

+0

브라우저의 개발 도구를 사용하여 어떤 텍스트가 나오는지 찾아야합니다. 문제를 표시하는 jsfiddle.net을 업로드하지 않았으므로 대신 할 수 없습니다. 그러나'replace()'가 반환하는 것과 관련이있을 것입니다. 즉,'currentline' 대신'matchesLine'을 추가하거나'.text()'대신'.val()'을 찾을 필요가 있을지 모르지만 어렵습니다 말하고 싶은 것은 HTML을 표시하지 않았기 때문입니다. – veeTrain

관련 문제