Question. 问题

在开发过程中,我们会遇到需要高亮显示的文本,无论是新闻、产品还是案例的检索,对于检索到的内容,都会产生这样的需求,一种好的处理方式就是通过 JS 实现。先来看看 PC 端的百度和移动端的微信的检索结果:

Solution. 解决

我们先来看一段简化的 JS 来实现关键字高亮显示的功能:

function setHeightKeyWord(keyword) {/* 获取需要处理的关键字 */var tempHTML = $("#text").html();/* 关键字替换文本 该文本设置有高亮颜色 */var replaceText = "<font style='color:red;'>$1</font>";/* 关键字正则匹配规则 */var r = new RegExp("(" + keyword + ")", "ig");/* 将匹配到的关键字替换成我们预设的文本 */tempHTML = tempHTML.replace(r, replaceText);/* 将文本显示到浏览器上 */$("#text").html(tempHTML);
}

思路很简单,就是通过正则将匹配到的关键字替换成我们预设的 HTML 片段,这个 HTML 片段通过 CSS 实现文本变色。

调用:

<body style="line-height: 40px;"><div>关键字: <input type="text" name="keyword" id="keyword"><button id="btn">高亮</button></div><div id="text">高亮显示文章中的关键字。</div>
</body><script type="text/javascript">
$(function() {$("#btn").click(function() {var $keyword = $("#keyword").val();setHeightKeyWord($keyword)});
});
</script>

将关键字输入到 input 框中,就能将这个关键字高亮显示。

Extension. 扩展

这是从 javascript 对html内容的关键字高亮显示 中转载过来的一个不错的封装,一个对多个关键字用不同颜色高亮显示的 JS 代码:

/** * 高亮显示关键字, 构造函数 * @param {} colors 颜色数组,其中每个元素是一个 '背景色,前景色' 组合 */
var Highlighter = function(colors) {  this.colors = colors;  if (this.colors == null) {  //默认颜色  this.colors = ['#ffff00,#000000','#dae9d1,#000000','#eabcf4,#000000',  '#c8e5ef,#000000','#f3e3cb, #000000', '#e7cfe0,#000000',  '#c5d1f1,#000000','#deeee4, #000000','#b55ed2,#000000',   '#dcb7a0,#333333', '#7983ab,#000000', '#6894b5, #000000'];  }
}  /** * 高亮显示关键字 * @param {} node    html element * @param {} keywords  关键字, 多个关键字可以通过空格隔开, 其中每个关键字会以一种颜色显式 *  * 用法: * var hl = new Highlighter(); * hl.highlight(document.body, '这个 世界 需要 和平'); */
Highlighter.prototype.highlight = function(node, keywords) {  if (!keywords || !node || !node.nodeType || node.nodeType != 1)  return;  keywords = this.parsewords(keywords);  if (keywords == null)  return;  for (var i = 0; i < keywords.length; i++) {  this.colorword(node, keywords[i]);  }
}  /** * 对所有#text的node进行查找,如果有关键字则进行着色 * @param {} node 节点 * @param {} keyword 关键字结构体,包含了关键字、前景色、背景色 */
Highlighter.prototype.colorword = function(node, keyword) {  for (var i = 0; i < node.childNodes.length; i++) {  var childNode = node.childNodes[i];  if (childNode.nodeType == 3) {  //childNode is #text  var re = new RegExp(keyword.word, 'i');  if (childNode.data.search(re) == -1) continue;  re = new RegExp('(' + keyword.word + ')', 'gi');  var forkNode = document.createElement('span');  forkNode.innerHTML = childNode.data.replace(re, '<span style="background-color:'+keyword.bgColor+';color:'+keyword.foreColor+'" mce_style="background-color:'+keyword.bgColor+';color:'+keyword.foreColor+'">$1</span>');  node.replaceChild(forkNode, childNode);  }  else if (childNode.nodeType == 1) {  //childNode is element  this.colorword(childNode, keyword);  }  }
}  /** * 将空格分隔开的关键字转换成对象数组 * @param {} keywords * @return {} */
Highlighter.prototype.parsewords = function(keywords) {  keywords = keywords.replace(//s+/g, ' ');  keywords = keywords.split(' ');  if (keywords == null || keywords.length == 0)  return null;  var results = [];  for (var i = 0; i < keywords.length; i++) {  var keyword = {};  var color = this.colors[i % this.colors.length].split(',');  keyword.word = keywords[i];  keyword.bgColor = color[0];  keyword.foreColor = color[1];  results.push(keyword);  }  return results;
}  /** * 按照字符串长度,由长到短进行排序 * @param {} list 字符串数组 */
Highlighter.prototype.sort = function(list) {  list.sort(function(e1, e2) {  return e1.length < e2.length;  });
}  

调用:

var hl = new Highlighter();
hl.highlight(document.body, '文本1 文本2 文本3');

【前端开发实例】HTML 检索内容 关键字 JS 高亮显示 -(二)相关推荐

  1. 【前端开发 | 实例】网页中实现 js 繁体简体切换

    在开发网站等前端页面时,往往需要用到繁体字和简体字的一键切换,这个功能实现起来很简单. 首先我们封装好JS代码 // 网页简繁体转换 // 本js用于客户在网站页面选择繁体中文或简体中文显示,默认是正 ...

  2. 北风网web前端开发培训课程 web前端开发实例视频教程下载

    web前端开发视频教程 Web前端开发工程师培训 零基础Web前端开发工程师高端培训配项目开发(月薪过万的最佳选择) 课程讲师:叮咚 课程分类:套餐推荐 适合人群:初级 课时数量:305课时 用到技术 ...

  3. web前端开发主要培训哪些内容

    想要学会web前端,最好是选择报web前端培训机构是最合适的选择,然后做好学习路线的规划,这样学起来是比较方便且快速的,下面小编就为大家详细的介绍一下web前端开发主要培训哪些内容? web前端开发主 ...

  4. 前端开发规范文档(html,css,js)

    首先吐槽一句,本来想上传word文档的,可是发现博客不能上传word文档,这就很尴尬了. 首先声明该规范不是本人写的,网上搜前端规范发现这个很详细就先复制下来做笔记,当然不可能啥都按规范来,每个公司的 ...

  5. Web前端开发入门教程,HTML5+CSS3+JS教程,达到web前端工程师的水平

    Web前端开发是一个非常热门的职业,随着互联网的发展,越来越多的企业需要拥有自己的网站和应用程序.本文将介绍Web前端开发的入门教程,包括HTML5.CSS3和JS教程,帮助读者达到Web前端工程师的 ...

  6. iviewui前端开发实例技术指南

    安装nodejs,参考 https://blog.csdn.net/yan_dk/article/details/90633166 安装nodojs环境不再细述. 开发实例1-后台系统 下载开源的后台 ...

  7. 超详细前端开发案例:品优购商场项目(二)

    目录 续前一篇内容 10. 品优购首页布局 10.4 nav 导航栏制作 10.5 footer 底部制作 10.6 mod_service 服务模块制作 10.7 main 主体模块制作 10.8 ...

  8. 对的调用没有匹配的函数_前端开发之——函数、事件、js对象

    函数 常用系统函数 parseInt ("字符串") 将字符串转换为整型数字 如: parseInt ("86")将字符串"86"转换为整型 ...

  9. 从0开始前端开发_设置DIV内容居中

    想要让DIV里的内容居中可以用如下代码: <style type="text/css">div{ text-align:center; //文本内容居中,可以将文本和图 ...

最新文章

  1. Hinton临时拒绝所有邀约发推致歉,称突然发现最新想法有致命缺陷
  2. Dom操作xml的常用方法
  3. python中哪里用到缩进_Python编程常见十大错误
  4. getopt:命令行选项、参数处理
  5. 【pmcaff】麦肯锡:预测2025年将出现的12大颠覆技术【图】
  6. Error: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-965200530-172.21.
  7. php大量数据库抽象,PHP系列(十二)数据库抽象层pdo
  8. c/c++教程 - 2.3 函数的提高 函数的形参列表默认值 占位参数 函数重载
  9. centos bond配置文件示例
  10. 计算机苏教版初一教案,文笔精华(苏教版七年级) 教案教学设计
  11. uniapp 如何打通消息推送-华为
  12. ElasticSearch--Field的使用
  13. 苹果8a1660是什么版本_苹果A1660是什么型号?
  14. FreeSWITCH 智能呼叫流程设计
  15. OpenVR API简单介绍
  16. Python服务器开发(1)
  17. 数据库关系模型与关系运算---2022.2.13
  18. 软件测试学习笔记_第1周第5天——缺陷管理、术语
  19. 都说要计算卡路里,但到底要怎么算?
  20. js——form表单验证

热门文章

  1. Nginx反向代理部署多个项目
  2. LaTeX自定义字体安装:Latex模板使用Windows-Stix-fontinstaller安装Wiley stix-fonts字体出错
  3. aspose.cad使用工具类,及遇到的问题
  4. ESP32设备驱动-TSL2591数光转换器驱动
  5. 如何使用java版张华平分词软件
  6. FlatList 优化
  7. 阿里小蜜数字人多模态交互实践
  8. 计算机应用专业中高职衔接专业优势,关于计算机应用专业中高职衔接的思考
  9. win7默认Aero系统主题灰色修复源码
  10. 木瓜移动跨境电商SaaS 聚焦核心用户的核心需求场景