残缺丶 2015-04-22 01:56 采纳率: 56%
浏览 2847
已采纳

仿百度搜索框智能提示功能,在搜索关键字变色的功能里,输入数字会有问题

仿百度搜索框智能提示功能,在搜索关键字变色的功能里,输入数字会有问题,如果数组中含有(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);
        }
  • 写回答

4条回答 默认 最新

  • Go 旅城通票 2015-04-22 02:51
    关注

    你代码就有问题,输入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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错