`

实现文字高亮功能的两种解决方案(Javascript/Jquery)

    博客分类:
  • js
阅读更多

高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色。一般在搜索结果页面会经常用到这个功能。下面就为大家提供两种解决方案,分别用javascript和jquery插件实现。

  1. 使用Javascript实现

    首先在<head>中引入下面javascript方法:

    <script type="text/javascript">
    //<![CDATA[ 
        //--------begin function fHl(o, flag, rndColor, url)------------------// 
        function fHl(o, flag, rndColor, url){ 
            /// <summary>
            ///     使用 javascript HTML DOM 高亮显示页面特定字词.
            ///     实例:
            ///         fHl(document.body, '纸伞|她'); 
            ///         这里的body是指高亮body里面的内容。
            ///         fHl(document.body, '希望|愁怨', false, '/'); 
            ///         fHl(document.getElementById('at_main'), '独自|飘过|悠长', true, 'search.asp?keyword='); 
            ///         这里的'at_main'是指高亮id='at_main'的div里面的内容。search.asp?keyword=指给关键字加的链接地址,
            ///         我这里加了一个参数,在后面要用到。可以是任意的地址。        
            /// </summary>
            /// <param name="o" type="Object">
            ///     对象, 要进行高亮显示的对象. 
            /// </param>
            /// <param name="flag" type="String">
            ///     字符串, 要进行高亮的词或多个词, 使用 竖杠(|) 分隔多个词 . 
            /// </param>
            /// <param name="rndColor" type="Boolean">
            ///     布尔值, 是否随机显示文字背景色与文字颜色, true 表示随机显示. 
            /// </param>
            /// <param name="url" type="String">
            ///     URI, 是否对高亮的词添加链接.
            /// </param>                        
            /// <return></return>
            var bgCor=fgCor=''; 
            if(rndColor){ 
                bgCor=fRndCor(10, 20); 
                fgCor=fRndCor(230, 255); 
            } else { 
                bgCor='#F0F'; 
                fgCor='black'; 
            } 
            var re=new RegExp(flag, 'i'); 
            for(var i=0; i<o.childNodes.length; i++){     
                var o_=o.childNodes[i]; 
                var o_p=o_.parentNode; 
                if(o_.nodeType==1) { 
                    fHl(o_, flag, rndColor, url);                 
                 } else if (o_.nodeType==3) { 
                    if(!(o_p.nodeName=='A')){ 
                        if(o_.data.search(re)==-1)continue; 
                        var temp=fEleA(o_.data, flag); 
                        o_p.replaceChild(temp, o_); 
                    } 
                }
            } 
            //------------------------------------------------ 
            function fEleA(text, flag){ 
                var style=' style="background-color:'+bgCor+';color:'+fgCor+';" ' 
                var o=document.createElement('span'); 
                var str=''; 
                var re=new RegExp('('+flag+')', 'gi'); 
                if(url){ 
                    str=text.replace(re, '<a href="'+url+ 
                    '$1"'+style+'>$1</a>'); //这里是给关键字加链接,红色的$1是指上面链接地址后的具体参数。
                } else { 
                    str=text.replace(re, '<span '+style+'>$1</span>'); //不加链接时显示
                } 
                o.innerHTML=str; 
                return o; 
            } 
            //------------------------------------------------ 
            function fRndCor(under, over){ 
                if(arguments.length==1){ 
                    var over=under; 
                        under=0; 
                }else if(arguments.length==0){ 
                    var under=0; 
                    var over=255; 
                } 
                var r=fRandomBy(under, over).toString(16); 
                    r=padNum(r, r, 2); 
                var g=fRandomBy(under, over).toString(16); 
                    g=padNum(g, g, 2); 
                var b=fRandomBy(under, over).toString(16); 
                    b=padNum(b, b, 2); 
                    //defaultStatus=r+' '+g+' '+b 
                return '#'+r+g+b; 
                function fRandomBy(under, over){ 
                    switch(arguments.length){ 
                        case 1: return parseInt(Math.random()*under+1); 
                        case 2: return parseInt(Math.random()*(over-under+1) + under); 
                        default: return 0; 
                    } 
                }
                function padNum(str, num, len){ 
                    var temp='' 
                    for(var i=0; i<len;temp+=num, i++); 
                    return temp=(temp+=str).substr(temp.length-len); 
                } 
            } 
        }
        //--------end function fHl(o, flag, rndColor, url)--------------------// 
    //]]> 
    </script>

    上面的fHl方法就是用来实现高亮的,参数的含义在注释中有写。

    然后在页面最后调用fHl方法,对指定区域指定文字高亮着色,例如:

    <script type="text/javascript">
    fHl(document.body, '高亮');   //对页面body的区域中的“高亮”文字背景着色
    </script>
  2. 使用Jquery插件实现

    jQuery Highlight Plugin是一款专门用来实现文本高亮显示的jquery插件,它用法简单且功能完善。

    使用方法如下:

    1. 在<head>中引入jquery文件及插件文件jquery.highlight.js
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
      <script type="text/javascript" src="jquery.highlight.js"></script>
    2. 在css中或通过jquery指定高亮区域的颜色:

       

       .highlight {background-color: #FFFF88; }
      $(".highlight").css({ backgroundColor: "#FFFF88" });
    3. 设置需要高亮显示的词语或通过事件触发高亮显示。例如:
            $("h1").highlight("highlight");
            //高亮显示所有h1标签中的“highligh”
            $("body p").unhighlight();
            //取消所有body中段落里的高亮显示;
            $("p").highlight("jQuery highlight plugin");
            //高亮段落中的词条 “jQuery highlight plugin”
            $("p").highlight(["jQuery", "highlight", "plugin"]);
            //高亮段落中的 “jQuery”,“highlight”及“plugin”
            $("p").highlight("Highlight", { caseSensitive: true });
            //高亮段落中的 “Highlight”,区分大小写。
            $("p").highlight("light", { wordsOnly: true });
            //高亮段落中的 “light”,必须是完整单词,“highlight”中的“light”不会高亮
            $("p").highlight("highlight", { element: 'em', className: 'error' });
            //高亮段落中的 “hightlight”,并为其指定父标签为em,class为error
            $("p").highlight("highlight", { element: 'em', className: 'error' });
            //高亮段落中的 “hightlight”,并为其指定父标签为em,class为error
           $("body p").highlight("jQuery", { element: 'a', className: 'jQueryLink'});
           $("body p a.jQueryLink").attr({ href: 'http://jquery.com' });
          //高亮段落中的 “jQuery”,并为其加上链接。

      在该插件主页可查看 实际效果

      下载该插件:jquery.highlight.js

  3. <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>detail.jsp</title>
    	<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    	<script type="text/javascript" src="js/jquery.highlight.js"></script>
    	
    	<script type="text/javascript">
    	function saveInfor(id){
    	$.get("collection/save.do?id="+id+"&t="+Math.random(),function callback(data){
    	alert(data);
    	});
    	}
    
    		function a(){
    			/*var ref = document.referrer;
    			var index = ref.lastIndexOf('key=');
    			if(index == -1) return;
    			ref = ref.substring(index+4, ref.length)
    			var key = decodeURI(ref);*/
    			<% 
    				String key = request.getParameter("key"); 
    				
    					
    			%>
    			
    					$("#highlight-content").highlight('<%=key%>'); 
    			
    			
    		}
    	</script>
    	<style type="text/css">
    		.highlight{background-color:yellow;padding:2px;}
    	</style>
    	<link rel="stylesheet" type="text/css" href="css/css/admin.css">
    	<link rel="stylesheet" type="text/css" href="css/css/front.css">
    	<link rel="stylesheet" type="text/css" href="css/css/jquery_validate.css">
    	<link rel="stylesheet" type="text/css" href="css/css/jquery_alerts.css">
    	<link rel="stylesheet" type="text/css" href="css/css/master.css"> 
      </head>
      
      <body onload="a()">
      <div align="center" >
        <div align="left" style="width: 70%;background-color: #F5F8FD;" >
        <br/>
        <h3 align="center"><b>${informationDetail.title}</b></h3><a href="javascript:saveInfor('${informationDetail.id }')">添加到我的收藏</a>
    	<hr width="70%" align="center" color="#D0D7E1" size="1"/>
    	<div align="center">${informationDetail.url}&nbsp; ${informationDetail.createDate}&nbsp; ${informationDetail.source}&nbsp;<br></div>
        <div class="blkContainerSblkCon" id="highlight-content">
        	${informationDetail.content}<br>
        </div>
        </div>
        </div>
      </body>
    </html>

     

分享到:
评论

相关推荐

    js/jquery树形菜单

    这个插件简化了在网页中实现动态树形菜单的过程,为开发者提供了便捷的解决方案。 jQuery是一个广泛使用的JavaScript库,它通过提供一套简洁的API来简化DOM操作、事件处理、动画和Ajax交互。在创建树形菜单时,...

    jquery ui实现拖动排序

    jQuery UI库提供了一种简单易用的解决方案,即Draggable和Droppable组件,可以方便地实现元素的拖放操作。本文将详细介绍如何使用jQuery UI实现拖动排序。 首先,我们需要了解jQuery UI的基本概念。jQuery UI是基于...

    jQuery黑白两种响应式手机下拉框select

    jQuery提供了一种强大的解决方案,可以创建出具有响应式设计的、美观的手机下拉框。本主题主要关注如何使用jQuery实现黑白两种不同样式的响应式手机下拉框。 首先,我们需要理解jQuery的基础。jQuery是一个轻量级的...

    javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】

    本文将深入探讨如何使用这两种技术来实现这一功能。 首先,我们需要了解不同浏览器对选取文本的支持方式有所不同。在IE9以下的版本中,它使用`document.selection`对象来处理选中的文本,而其他现代浏览器如Firefox...

    jQuery实现高亮显示的方法

    总的来说,jQuery的`addClass`和`removeClass`方法提供了灵活且高效的高亮显示解决方案,结合CSS样式设计,可以轻松地实现各种视觉效果。在开发过程中,应根据实际场景选择最合适的实现方式,以保证代码的简洁性和可...

    jquery入门(2)

    **2.2 jQuery的解决方案** 为了解决这些问题,jQuery提供了一个更为灵活的方法——`$(document).ready()`。当文档结构解析完成,但并未加载完诸如图片等资源时,即可触发此事件。 **2.3 使用示例** ```javascript $...

    umeditor1.2.3-utf8-jsp

    它由百度公司开发,旨在提供简单、易用且功能丰富的文本编辑解决方案。"umeditor1.2.3-utf8-jsp" 版本是该编辑器的一个特定发行版,包含了UTF-8编码支持,适合在Java服务器页面(JSP)环境中使用。 1. **UMEditor ...

    带聚焦效果的jQuery响应式图片轮播图插件

    综上所述,jQuery-bigSlider插件是利用jQuery库构建的一种响应式图片轮播解决方案,它结合了当前图片高亮和图片放大等聚焦效果,为网页设计增加了动态性和吸引力。开发者可以轻松集成这个插件到他们的项目中,以提升...

    jquery-1.7.2-vsdoc文件jquery-1.8.0-vsdoc 未找到

    在JavaScript的世界里,jQuery是一个非常流行的库,它极大地简化了DOM...对于找不到特定版本`vsdoc`的情况,开发者可以通过多种途径寻求解决方案,确保他们在使用最新版本的jQuery时依然能享受到强大的代码提示功能。

    jquery hover事件导航条.zip

    本项目“jquery hover事件导航条”旨在提供一种优雅的解决方案,利用jQuery库的hover事件来实现动态的菜单导航效果。这个效果使得当鼠标悬停在导航条的某个链接上时,对应的浮动div层会滑动出现,以高亮显示,从而...

    jQuery插件 表格奇偶交替,加亮显示

    jQuery插件在Web开发中广泛使用,特别是在处理用户界面交互和增强用户体验方面。"表格奇偶交替,加亮显示"的jQuery插件是这类插件中的一个实例,它...对于任何处理大量数据的网页,这都是一个值得考虑的实用解决方案。

    jQuery网页锚链接平滑过渡切换代码.zip

    这个插件利用jQuery的强大功能,实现锚链接的平滑过渡效果,同时包含了两种特效:模糊和弹性。模糊特效可能是指在滚动过程中,元素的可见度逐渐增加或减少,模拟出一种模糊到清晰的过渡;弹性特效则可能意味着滚动...

    jquery.editable-select.min的css与js

    总结来说,jQuery Editable Select 提供了一个强大且灵活的下拉选择框解决方案,通过CSS和JS的结合,实现了可输入、可实时查询的功能,极大地提升了用户体验。开发者可以根据项目需求进行定制,以满足各种复杂场景的...

    jquery实现的两边会显示部分额外2张图片的宽屏通栏焦点图特效源码.zip

    标题中的“jquery实现的两边会显示部分额外2张图片的宽屏...总的来说,这个压缩包提供了一套完整的jQuery实现的宽屏焦点图解决方案,对于想要在自己的网页中添加类似效果的开发者来说,这是一个很好的学习和参考资源。

    css-jquery后台模板

    在"css-jquery后台模板"中,这两种技术被巧妙地结合在一起,构建出具有高效、美观且用户友好的后台管理界面。 1. CSS在后台模板中的作用: - **布局管理**:CSS通过盒模型、定位和流体布局等概念,确保后台模板的...

    jquery导航菜单

    在本实例中,可能包含两种不同的导航菜单实现,这两种菜单可能都具有响应式设计,能够适应不同设备的屏幕尺寸,提供一致的用户体验。 描述中提到的"repeater绑定数据库显示",暗示了这些菜单可能支持动态数据加载。...

    jQuery+css国外分类目录网页导航条代码

    导航条的分类目录可能通过CSS的Flexbox或Grid布局来实现,这两种现代布局模式允许我们轻松地创建多列或多行的网格系统,适应不同数量的菜单项。同时,通过媒体查询,我们可以根据屏幕尺寸应用不同的CSS规则,实现...

    jQuery异步加载分页代码.zip

    本压缩包"jQuery异步加载分页代码.zip"提供了一种利用jQuery来实现异步加载分页的解决方案,主要涉及到的知识点包括jQuery基础、AJAX异步请求和分页逻辑处理。 1. **jQuery基础**:jQuery是一个广泛使用的...

    jQuery+d3.js实现的企业组织架构效果图源码.zip

    本项目源码"jQuery+d3.js实现的企业组织架构效果图源码.zip"正是基于这个需求,结合了jQuery的易用性和d3.js的强大数据可视化能力,为用户提供了灵活且直观的组织结构展示方案。 首先,jQuery是一个广泛使用的...

    jQuery手机端网页tab选项卡代码.zip

    "jQuery手机端网页tab选项卡代码"就是一个针对这种情况而设计的解决方案。它主要用于创建一种类似于团购应用中的功能,用户可以通过点击不同的选项卡查看优惠券的状态,如未使用、已使用或已过期。 jQuery是一款...

Global site tag (gtag.js) - Google Analytics