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

问题描述

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

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

解决方案二:

//搜索结果关键字高亮显示
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 = "$1";
else
replaceText = "$1";
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);
}


解决方案三:

 //键盘按下事件
        Array.prototype.filter = function (v) { var r = []; for (k in this) if (this[k].indexOf(v) != -1) r.push(this[k]); return r; }
        var arr = ["orage", "苹果", "lisa", "1078256","2123", "like", "jack", "abcdefg", "pig", "芒果", "shirly", "xg", "One", "live", "Two", "Four"];
        function selectItem(txtConten, event) {
            switch (event.keyCode) {
                case 38: //上
                    var li = $('#ul li'), fli = li.filter('.focus');
                    li.removeClass('focus');
                    if (fli.length == 0 || fli.prev().length == 0) li.filter(':last').addClass('focus');
                    else fli.prev().addClass('focus');
                    break;
                case 40: //下
                    var li = $('#ul li'), fli = li.filter('.focus');
                    li.removeClass('focus');
                    if (fli.length == 0 || fli.next().length == 0) li.filter(':first').addClass('focus');
                    else fli.next().addClass('focus');
                    break;
                case 13: //回车
                    var li = $('#ul li.focus');
                    if (li.length > 0) {
                        $('#txtConten').val(li.text());
                        li.parent().hide();
                    }
                    break;
                default:
                    if (txtConten.value != '') {
                        var r = arr.filter(txtConten.value);
                        $('#ul').html($(r).map(function () { return '<li>' + this + '</li>' }).get().join('')).show()
                        .find('li').click(function () { clearTimeout(timer); $('#txtConten').val(this.innerHTML) });
                    } else $('#ul').hide();
            }
            //文本框的值
            var $keyword = $("#txtConten").val();
            setHeightKeyWord('ul', $keyword, '#1049e8', true);
        }
时间: 2024-11-02 07:16:58

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

利用jsonp跨域调用百度js实现搜索框智能提示_javascript技巧

项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好的选择. 使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript也可以实现跨域调用js.  ok,了解了jsonp的原理和应用后,我们看看百度的智能提示是如何做的 在chrome的调试窗口下看看百度搜索发出的请求.当输入关键字"a",请求如图:  用firebug看下请求的参数,如图: 请求方式:get请求请求参数:wd明显是要搜索的关键字:cb是请

Servlet+Ajax实现智能搜索框智能提示功能

利用无刷新技术智能变换搜索框的提示,同百度搜索 效果图 其基本原理: 1.给搜索框编写js绑定事件onkeyup(键盘输入时).onfocus(当鼠标点击搜索框外的时候清空提示) 2.首先获得用户输入.之后将获得的数据传给服务器,服务器将数据传给后台,后台获取服务器传来的数据进行处理,得到关联数据,向前端返回json格式,前端通过回调函数,将返回来的json解析成文本,将文本传输到搜索框下方的展示窗 如下为支持json的jar包 search.jsp <%@ page language="

百度搜索框智能提示案例jsonp_javascript技巧

先给大家展示下效果图: 下面一段代码给大家分享了百度搜索框智能提示案例jsonp的知识,具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>百度下拉_sug-jquery</title> <script src="jquery-1.11.3.js"><

jQuery 插件仿百度搜索框智能提示(带Value值)_jquery

因公司需要做一个仿百度搜索框,并且带Value值的, 网上找了下只有Text, 都没带Value的 所以做了个. 直接贴代码. 复制代码 代码如下: (function($) { var timeid; var lastValue; var options; var c; var d; var t; $.fn.autoComplete = function(config) { c = $(this); var defaults = { width: c.width(), //提示框的宽度 默认跟

jQuery仿百度搜索框智能提示效果代码

直接贴代码.    代码如下 复制代码 (function($) {     var timeid;     var lastValue;     var options;     var c;     var d;     var t;     $.fn.autoComplete = function(config) {         c = $(this);         var defaults = {             width: c.width(), //提示框的宽度 默认

jquery php 百度搜索框智能提示效果

先来看看效果 代码如下 index.html文件,保保存成index.htm  代码如下 复制代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"&g

jquery+php实现搜索框自动提示_jquery

今天突然想给本站做个搜索页面,这样用户可以通过搜索来找到自己喜欢的内容,也避免了在海量信息中手动查找资源的麻烦,我的目标和百度首页的效果类似,当用户输入要搜索的文字时,我们在下方给出相关的十条信息,如果用户要找的就是这十条信息内的某一条,那么简单,直接点击就可在新页面中打开页面,主要就是想更人性化一点,让用户使用起来更方便. 先看一下效果图吧,这样更有动力,要不然大家还不知道我在讲什么,到底要达到什么样的效果! jquery+php实现搜索框自动提示 下面先主要讲解原理: 在search.htm

标签-仿百度搜索框只能提示上下键移动的功能效果 js+jquery

问题描述 仿百度搜索框只能提示上下键移动的功能效果 js+jquery 搜索结果不能上下移动,只能按一下,按第二下的时候结果只剩下一个了,currentSelIndex总是为0 ,currentSelIndex是记录 标签id的变量. 首先,我输入一个字符,匹配到的结果会在文本框下方显示出来.因为代码都是写在搜索框的onkeyup ()事件中的,每按一下键盘都会触发该事件,当我第一次按(下)键的时候,相应的会把选中的文本赋 给搜索框,所以按第二次的时候又会重新触发该事件,搜索条件变成了第一次按(

asp.net使用jquery实现搜索框默认提示功能

 这篇文章主要介绍了asp.net使用jquery实现搜索框默认提示功能,大家参考使用吧 文本框中创建默认文本提示   通常用户在搜索内容时,在文本框输入内容前,文本框都会给出默认提示,提示用户输入正确的内容进行搜索.   当文本框获得焦点,如果文本框内容跟提示内容一样,提示内容会自然消失.   当文本框没有任何值并失去焦点,文本框内容会重新生成默认提示.   为了实现上面的需求,代码如下:   代码如下: <%@ Page Language="C#" AutoEventWire