使用jquery显示搜索中的匹配行

时间:2012-05-01 13:15:55

标签: javascript jquery

我有一些代码可以从输入源搜索页面上显示的当前信息,这是一个加载的XML。然后显示找到该单词的次数,然后应该显示该行所在的行发现这个词虽然目前显示所有的线条。代码是

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 个答案:

答案 0 :(得分: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>");
}