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

私はこれを変更しましたが、なぜこれが起こっているのか、あるいはこれを修正するために何ができるのか、「matchedLine」の代わりにすべての行を表示していますか? – user1354895

+0

ブラウザの開発ツールを使用して、どのテキストが入力されているかを突き止める必要があります。あなたは問題を表示しているjsfiddle.netをアップロードしていないので、私はあなたのためにそれをすることはできません。しかし、おそらく 'replace()'が返すものと関係があり、 'currentline'ではなく' matchesLine'を追加しているか、 '.text()'ではなく '.val()'を見つける必要がありますが、言い換えれば、HTMLを表示していないからです。 – veeTrain

関連する問題