jQuery实现高亮显示网页关键词的方法


Posted in Javascript onAugust 07, 2015

本文实例讲述了jQuery实现高亮显示网页关键词的方法。分享给大家供大家参考。具体如下:

这是一款基于jquery实现的高亮显示网页上搜索关键词的代码,当你在文本框中输入的时候,如果下面的正文中包括你输入的内容,也就是关键字,那么这些关键字是会高亮显示的,被动态添加成黄色,看上去很醒目,就像百度快照显示关键词的样子。

运行效果如下图所示:

jQuery实现高亮显示网页关键词的方法

具体代码如下:

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jquery文字高亮显示</title>
<style type="text/css">
.highlight {
  background-color: #fff34d;
  -moz-border-radius: 5px; /* FF1+ */
  -webkit-border-radius: 5px; /* Saf3-4 */
  border-radius: 5px; /* Opera 10.5, IE 9, Saf5, Chrome */
  -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* FF3.5+ */
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* Saf3.0+, Chrome */
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.7); /* Opera 10.5+, IE 9.0 */
}
.highlight {
  padding:1px 4px;
  margin:0 -4px;
}
</style>
</head>
<body>
Search: <input type="text" id="text-search" />
<p>This can include web design, web content development, client liaison, client-side/server-side scripting, web server and network security configuration, and e-commerce development. However, among web professionals, "web development" usually refers to the main non-design aspects of building web sites: writing markup and coding. Web development can range from developing the simplest static single page of plain text to the most complex web-based internet applications, electronic businesses, or social ntwork services.</p>
(Text from Wikipedia)
<script type="text/javascript" src="jquery-1.6.2.min.js"></script>
<script type="text/javascript">
jQuery.fn.highlight = function(pat) {
 function innerHighlight(node, pat) {
 var skip = 0;
 if (node.nodeType == 3) {
  var pos = node.data.toUpperCase().indexOf(pat);
  if (pos >= 0) {
  var spannode = document.createElement('span');
  spannode.className = 'highlight';
  var middlebit = node.splitText(pos);
  var endbit = middlebit.splitText(pat.length);
  var middleclone = middlebit.cloneNode(true);
  spannode.appendChild(middleclone);
  middlebit.parentNode.replaceChild(spannode, middlebit);
  skip = 1;
  }
 }
 else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
  for (var i = 0; i < node.childNodes.length; ++i) {
  i += innerHighlight(node.childNodes[i], pat);
  }
 }
 return skip;
 }
 return this.each(function() {
 innerHighlight(this, pat.toUpperCase());
 });
};
jQuery.fn.removeHighlight = function() {
 function newNormalize(node) {
  for (var i = 0, children = node.childNodes, nodeCount = children.length; i < nodeCount; i++) {
    var child = children[i];
    if (child.nodeType == 1) {
      newNormalize(child);
      continue;
    }
    if (child.nodeType != 3) { continue; }
    var next = child.nextSibling;
    if (next == null || next.nodeType != 3) { continue; }
    var combined_text = child.nodeValue + next.nodeValue;
    new_node = node.ownerDocument.createTextNode(combined_text);
    node.insertBefore(new_node, child);
    node.removeChild(child);
    node.removeChild(next);
    i--;
    nodeCount--;
  }
 }
return this.find("span.highlight").each(function() {
  var thisParent = this.parentNode;
  thisParent.replaceChild(this.firstChild, this);
  newNormalize(thisParent);
 }).end();
};
</script>
<script type="text/javascript">
$(function() {
  $('#text-search').bind('keyup change', function(ev) {
    // pull in the new value
    var searchTerm = $(this).val();
    // remove any old highlighted terms
    $('body').removeHighlight();
    // disable highlighting if empty
    if ( searchTerm ) {
      // highlight the new term
      $('body').highlight( searchTerm );
    }
  });
});
</script>
</body>
</html>

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
使用js获取地址栏中传递的值
Jul 02 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
Jun 12 Javascript
javascript学习笔记(四)function函数部分
Sep 30 Javascript
浅析JavaScript动画
Jun 10 Javascript
AngularJS全局scope与Isolate scope通信用法示例
Nov 22 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
Jan 13 Javascript
ES6中Generator与异步操作实例分析
Mar 31 Javascript
纯原生js实现贪吃蛇游戏
Apr 16 Javascript
gulp安装以及打包合并的方法教程
Nov 19 Javascript
解决vue-cli创建项目的loader问题
Mar 13 Javascript
浅谈JS对象添加getter与setter的5种方法
Jun 09 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
Aug 07 #Javascript
css如何让浮动元素水平居中
Aug 07 #Javascript
jQuery实现仿百度帖吧头部固定导航效果
Aug 07 #Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
Aug 07 #Javascript
jquery简单实现网页层的展开与收缩效果
Aug 07 #Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
Aug 07 #Javascript
jQuery实现仿腾讯视频列表分页效果的方法
Aug 07 #Javascript
You might like
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Python解析最简单的验证码
2016/01/07 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
Python中属性和描述符的正确使用
2016/08/23 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
HTML5+CSS3应用详解
2014/02/24 HTML / CSS
阿玛尼化妆品美国官网:Giorgio Armani Beauty
2017/02/02 全球购物
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
学校安全教育制度
2014/01/31 职场文书
幼儿教师培训感言
2014/03/08 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
县级文明单位申报材料
2014/05/23 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB