2012-05-01 25 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

如果你想在條件內執行一行代碼,那麼你需要在它周圍放置大括號。否則,只有的下一個行動項目將被執行。在你的情況下,增加匹配的行數。

因爲if語句已經完成了它的工作,所以在後續操作項中,將找到的行追加到DOM中會在每個分支上執行。下面不對行:

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()'返回的內容有關,你要追加'matchesLine'而不是'currentline',或者需要找到'.val()'而不是'.text()',但是很難因爲你沒有顯示你的HTML。 – veeTrain

相關問題