程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 顯示-仿百度搜索框智能提示功能,在搜索關鍵字變色的功能裡,輸入數字會有問題

顯示-仿百度搜索框智能提示功能,在搜索關鍵字變色的功能裡,輸入數字會有問題

編輯:編程綜合問答
仿百度搜索框智能提示功能,在搜索關鍵字變色的功能裡,輸入數字會有問題

仿百度搜索框智能提示功能,在搜索關鍵字變色的功能裡,輸入數字會有問題,如果數組中含有(1)數字,當文本框第一次按下1這個數字來搜索時,會出現問題,例如:數組中有2123,在文本框輸入1,結果會顯示2123[[[1]]];如果數組中有兩條或以上含有(1)數字的,則搜索結果第一行會這樣顯示,之後的都正常顯示。輸入“,”時也有問題,會出現一個標簽字符串,原因是因為都“,”來分割的。
貼上我的搜索關鍵字變色的代碼,大家給我看一下吧。
//搜索結果關鍵字高亮顯示

         function setHeightKeyWord(id, keyword, color, bold) {
            if (keyword == "")
                return;
            var tempHTML = $("#" + id).html();
            var htmlReg = new RegExp("\<.*?\>", "i");
            var arrA = new Array();
            for (var i = 0; true; i++) {
                var m = htmlReg.exec(tempHTML);
                if (m) {
                    arrA[i] = m;
                }
                else {
                    break;
                }
                tempHTML = tempHTML.replace(m, "[[[[" + i + "]]]]");
            }
            var replaceText
            if (bold)
                replaceText = "<b style='color:" + color + ";'>$1</b>";
            else
                replaceText = "<font style='color:" + color + ";'>$1</font>";
            var arrayWord = keyword.split(',');
            for (var w = 0; w < arrayWord.length; w++) {
                var r = new RegExp("(" + arrayWord[w].replace(/[(){}.+*?^$|\\\[\]]/g, "\\$&") + ")", "ig");
                tempHTML = tempHTML.replace(r, replaceText);
            }
            for (var i = 0; i < arrA.length; i++) {
                tempHTML = tempHTML.replace("[[[[" + i + "]]]]", arrA[i]);
            }
            $("#" + id).html(tempHTML);
        }

最佳回答:


你代碼就有問題,輸入1,替換的html時for (var i = 0; true; i++) { var m = htmlReg.exec(tempHTML);不就出現了 [[[[1]]]]這個,做關鍵字替換的時候你[[[[這個裡面的1也被替換了

所以你的tempHTML = tempHTML.replace("[[[[" + i + "]]]]", arrA[i]);肯定就不匹配了

你遍歷子對象進行替換就好了,干嘛要替換html標簽

 <ul id="ul">
<li>12313</li>
<li>12313</li>
<li>233</li>
<li>12313</li></ul>
<script>
    $(function () {
        setHeightKeyWord('ul', '1', 'blue');
    });
    function setHeightKeyWord(id, keyword, color, bold) {
        if (keyword == "") return;
        var replaceText
        if (bold)
            replaceText = "<b style='color:" + color + ";'>$1</b>";
        else
            replaceText = "<font style='color:" + color + ";'>$1</font>";
        var arrayWord = keyword.split(',');
        var nodes = $('#' + id + '>li');//注意修改子對象選擇器
        for (var w = 0; w < arrayWord.length; w++) {
            for (var i = 0; i < nodes.length; i++) {
                var r = new RegExp("(" + arrayWord[w].replace(/[(){}.+*?^$|\\\[\]]/g, "\\$&") + ")", "ig");
                nodes[i].innerHTML = nodes[i].innerHTML.replace(r, replaceText);
            }
        }
    }
</script>
showbo
showbo
qq_19755427
showbo
qq_19755427
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved