搜索引擎关键字高亮显示(包括baidu)[javascript]

搜索引擎老是搜到javaeye上的页面,搜索关键字高亮显示觉得特别有帮助。用google analytics后发现大概80%的流量都是来自搜索引擎。所以觉得也有这个必要实现这个功能。

google到一篇代码,试了试发觉没有作用,可能是浏览器也可以是copy代码没有完整,反正到最后没有成功。不过我看了下代码觉得也挺容易的。关键是document.referrer这个属性。它会记录redirect过来的地址信息。比如搜索引擎就是把搜索的关键字等信息都带过来。

得到搜索关键字只要parse那个连接地址就行了,比较简单。得到关键字后高亮这些内容就行了。也看了之前那本代码,大致看懂了原理,由于这里用了 jquery,想找个现成的插件,结果找到的一些效率实在不敢恭维,页面信息很少的时候确实可以实现,但是内容很多由于纯的replace,非常慢,而且整个替换自后页面整体要重新渲染一遍效果也非常恶心。

自己花了点心思写了个高亮程序。

jQuery.fn.kk_highlight = function(target_value , highlight_style){
    this.each(function(){
            var children = this.childNodes;
            for(var i = 0 ; i < children.length ; i++){
                var child = children[i];
                //alert(child.nodeType + "  " + child.nodeValue);
                if(child.nodeType == 3){
                    //replace
                   var temp_value =  child.nodeValue
                   //toLowercase
                   var key_index = temp_value.indexOf(target_value);
                   if(key_index >= 0){
                        //alert("get in!!!" + temp_value + "ssss");
                        child.nodeValue = temp_value.substr(0 , key_index);
                        //$(child).after("kkkk")
                        $(child).after("" + target_value + "" + temp_value.substr(key_index + target_value.length));
                        i += 1;
                   }
                }else{
                    $(child).kk_highlight(target_value , highlight_style);
                }
            }
            });
};

//$('body').highlight("key words"); 就可以得到效果了
/*
//要加个样式
        
        .jquery-highlight{
            background-color:#ff0000;
            font-size:16px;
        }
        
*/

虽说小bug估计还有,但是初步还算靠谱。

试试google,试试baidu,结果百度搜中文出了问题。

之前说的通过document.referrer得到搜索引擎的信息,拿到搜索关键字,在这个referrer地址中如果出现中文就是以 escape的形式出现的,形如%B3%B2%C4这样的实行,但是baidu过来的信息这里用decodeURIComponent的时候出错了。

发现google过来的一个中文字对应的是%xx * 3的形式,而百度过来的确只有两个。原因是一个unicode编码而baidu用了gb2312编码。js能处理这些gb2312编码的东西不?

研究了一下否决了,发觉js所有的字符都是unicode处理的,比如"xxx".charCodeAt(0)这个方法返回的字符值始终是 unicode的 fromcharcode方法也是只能处理unicode。这么一来发觉只能借助服务器把gb2312的内容转成unicode了。

试试了,成功。

我有在baidu上试试搜javaeye的中文关键字,结果发觉它都没有实现,哈哈哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值