js 关键词高亮(根据ID/tag高亮关键字)案例介绍


Posted in Javascript onJanuary 21, 2013
<!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"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>JS 关键词高亮</title> 
<script type="text/javascript"> 
/* 
* 参数说明: 
* obj: 对象, 要进行高亮显示的html标签节点. 
* hlWords: 字符串, 要进行高亮的关键词词, 使用 竖杠(|)或空格分隔多个词 . 
* bgColor: 背景颜色,默认为红色. 
*/ 
function MarkHighLight(obj, hlWords, bgColor) { 
hlWords = AnalyzeHighLightWords(hlWords); 
if (obj == null || hlWords.length == 0) 
return; 
if (bgColor == null || bgColor == "") { 
bgColor = "red"; 
} 
MarkHighLightCore(obj, hlWords); 
//执行高亮标记的核心方法 
function MarkHighLightCore(obj, keyWords) { 
var re = new RegExp(keyWords, "i"); 
var style = ' style="background-color:' + bgColor + ';" ' 
for (var i = 0; i < obj.childNodes.length; i++) { 
var childObj = obj.childNodes[i]; 
if (childObj.nodeType == 3) { 
if (childObj.data.search(re) == -1) continue; 
var reResult = new RegExp("(" + keyWords + ")", "gi"); 
var objResult = document.createElement("span"); 
objResult.innerHTML = childObj.data.replace(reResult, "<span" + style + ">$1</span>"); 
if (childObj.data == objResult.childNodes[0].innerHTML) continue; 
obj.replaceChild(objResult, childObj); 
} else if (childObj.nodeType == 1) { 
MarkHighLightCore(childObj, keyWords); 
} 
} 
} 
//分析关键词 
function AnalyzeHighLightWords(hlWords) { 
if (hlWords == null) return ""; 
hlWords = hlWords.replace(/\s+/g, "|").replace(/\|+/g, "|"); 
hlWords = hlWords.replace(/(^\|*)|(\|*$)/g, ""); 
if (hlWords.length == 0) return ""; 
var wordsArr = hlWords.split("|"); 
if (wordsArr.length > 1) { 
var resultArr = BubbleSort(wordsArr); 
var result = ""; 
for (var i = 0; i < resultArr.length; i++) { 
result = result + "|" + resultArr[i]; 
} 
return result.replace(/(^\|*)|(\|*$)/g, ""); 
} else { 
return hlWords; 
} 
} 
//利用冒泡排序法把长的关键词放前面 
function BubbleSort(arr) { 
var temp, exchange; 
for (var i = 0; i < arr.length; i++) { 
exchange = false; 
for (var j = arr.length - 2; j >= i; j--) { 
if ((arr[j + 1].length) > (arr[j]).length) { 
temp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = temp; 
exchange = true; 
} 
} 
if (!exchange) break; 
} 
return arr; 
} 
} 
//end 
function search() { 
var obj = document.getElementById("waiDiv"); 
var keyWord = document.getElementById("keyWord"); 
MarkHighLight(obj, keyWord.value, "Orange"); 
} 
</script> 
</head> 
<body> 
<div id="waiDiv"> 
<input type="text" id="keyWord" /> 
<input type="button" value="搜索" onclick="search()" /><br /> 
<br /> 
<div id="contentDiv"> 
二货朋友玩游戏被骗1200块,报警后被告知不够2000没办法立案。强大的二货又往那个账号寄了800块。你说那骗子是开心呢?还是开心极了呢。 
</div> 
</div> 
</body> 
</html>

改进版
function highlightWord(node, word) { 
// Iterate into this nodes childNodes 
if (node.hasChildNodes) { 
var hi_cn; 
for (hi_cn = 0; hi_cn < node.childNodes.length; hi_cn++) { 
highlightWord(node.childNodes[hi_cn], word); 
} 
} 
// And do this node itself 
if (node.nodeType == 3) { // text node 
tempNodeVal = node.nodeValue.toLowerCase(); 
tempWordVal = word.toLowerCase(); 
if (tempNodeVal.indexOf(tempWordVal) != -1) { 
pn = node.parentNode; 
if (pn.className != "highlight") { 
// word has not already been highlighted! 
nv = node.nodeValue; 
ni = tempNodeVal.indexOf(tempWordVal); 
// Create a load of replacement nodes 
before = document.createTextNode(nv.substr(0, ni)); 
docWordVal = nv.substr(ni, word.length); 
after = document.createTextNode(nv.substr(ni + word.length)); 
hiwordtext = document.createTextNode(docWordVal); 
hiword = document.createElement("span"); 
hiword.className = "highlight"; 
hiword.appendChild(hiwordtext); 
pn.insertBefore(before, node); 
pn.insertBefore(hiword, node); 
pn.insertBefore(after, node); 
pn.removeChild(node); 
} 
} 
} 
} 
//根据Tag名高亮关键字 
function SearchHighlightTag(node, key) { 
if (!document.createElement) return; 
if (key.length === 0) return false; 
var array = new Array(); 
array = key.split(" "); 
var element = document.getElementsByTagName(node); 
for (var i = 0; i < array.length; i++) { 
for (var j = 0; j < element.length; j++) { 
highlightWord(element[j], array[i]); 
} 
} 
} 
//根据ID高亮关键字 
function SearchHighlightID(node, key) { 
if (!document.createElement) return; 
if (key.length === 0) return false; 
var array = new Array(); 
array = key.split(" "); 
var element = document.getElementById(node); 
for (var i = 0; i < array.length; i++) { 
for (var j = 0; j < element.length; j++) { 
highlightWord(element, array[i]); 
} 
} 
}
Javascript 相关文章推荐
在视频前插入广告
Nov 20 Javascript
javascript实现全角与半角字符的转换
Jan 07 Javascript
js密码强度实时检测代码
Mar 02 Javascript
总结javascript中的六种迭代器
Aug 16 Javascript
jQuery实现给input绑定回车事件的方法
Feb 09 Javascript
Bootstrap媒体对象学习使用
Mar 07 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
Jun 21 Javascript
基于Vue的ajax公共方法(详解)
Jan 20 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
JSONP原理及应用实例详解
Sep 13 Javascript
vue 根据选择条件显示指定参数的例子
Nov 09 Javascript
用javascript制作qq注册动态页面
Apr 14 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
Jan 20 #Javascript
使用jquery实现图文切换效果另加特效
Jan 20 #Javascript
分享一个我自己写的ToolTip提示插件(附源码)
Jan 20 #Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 #Javascript
javascript改变position值实现菜单滚动至顶部后固定
Jan 18 #Javascript
js+数组实现网页上显示时间/星期几的实用方法
Jan 18 #Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 #Javascript
You might like
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
javascript实现简易计算器
2017/02/01 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
下载给定网页上图片的方法
2014/02/18 Python
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
python图书管理系统
2020/04/05 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
美国手机支架公司:PopSockets
2019/11/27 全球购物
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
公司委托书格式范文
2014/04/04 职场文书
反邪教警示教育方案
2014/05/13 职场文书
董事长秘书工作职责
2014/06/10 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫