基于jquery的给文章加入关键字链接


Posted in Javascript onOctober 26, 2010

开始技术部门打算在后台添加或者修改文章的时候,把文章里面的关键字替换为<a>标签。但是这样就出现一些问题
如果新添加一个关键字,是不是所有的文章又要重新过滤一边。把新关键字替换掉。
如果修改了关键字的名字或者是修改了关键字的链接地址,那么又要重新过滤所有文件。
综合了一些情况后,感觉使用后台解决的方案行不通。于是我想到了前台脚本解决
思路:
关键字链接的信息任然存放在数据库中,在数据库中有一些字段来保存关键字的信息。
当用户添加,删除,更新关键字的时候,在后台生成一个js文件,格式如下:

var wordlinkdata='[{"WordLinkAlias":"wordlinkReplace4","WordLinkUrl":"https://3water.com","WordLinkName":"你大爷21"},{"WordLinkAlias":"wordlinkReplace7","WordLinkUrl":"http://sc.3water.com","WordLinkName":"电脑"}]'

wordlinkdata变量存放一些json数据,这些数据是第二步的操作生成的。"WordLinkAlias"指的是关键词的名称,"WordLinkUrl"是关键字的链接。
在前台页面引用我们生成的js文件,我工作中使用的是jquery库。我们需要做工作是替换文章中所有的关键字 。这样,我们就需要用wordlinkdata的数据不断的循环判断。
$(document).ready(function() { 
AddWordLink(); 
}); 
function AddWordLink(){ 
//给特殊词加上链接 
if (wordlinkdata != undefined && wordlinkdata != null) { 
var content = $(".divArtContent"); 
if (content != null) { 
var myobject = eval('(' + wordlinkdata + ')'); 
for (var i = 0; i < myobject.length; i++) { 
content.highLight(myobject[i].WordLinkName, myobject[i].WordLinkUrl); 
} 
} 
} 
} 
(function($) { 
$.fn.highLight = function(str, url) { 
if (str == undefined || str == " ") { 
return this.find("a.divArtContentAlink").each(function() { 
this.parentNode.firstChild.nodeName; 
with (this.parentNode) { 
replaceChild(this.firstChild, this); 
normalize(); 
} 
}).end(); 
} else { 
$(this).each(function() { 
elt = $(this).get(0); 
elt.normalize(); 
$.each($.makeArray(elt.childNodes), function(i, node) { 
if (node.nodeType == 3) { 
var searchnode = node; 
var pos = searchnode.data.indexOf(str); 
if (pos >= 0) {//查找 
var spannode = document.createElement('a'); 
spannode.className = 'divArtContentAlink'; 
spannode.href = url; 
spannode.target = 'blank'; 
var middlebit = searchnode.splitText(pos); 
var searchnode = middlebit.splitText(str.length); 
var middleclone = middlebit.cloneNode(true); 
spannode.appendChild(middleclone); 
if (searchnode.parentNode != undefined) 
searchnode.parentNode.replaceChild(spannode, middlebit); 
} 
} else { 
$(node).highLight(str, url); 
} 
}) 
}) 
} 
return $(this); 
} 
})(jQuery);

$.fn.highLight扩展是一个高亮扩展,我修改了一下,用来满足需求,如果你需要修改链接的样式,或者想自己创建别的元素,你可以修改以下的代码
var spannode = document.createElement('a'); 
spannode.className = 'divArtContentAlink'; 
spannode.href = url; 
spannode.target = 'blank';

不过这个方法的缺陷是,当关键字过多的时候(超过150个),页面的速度会下降
总结:这种方式的优势是,不需要对以前的文章做任何的修改,添加,删除,修改很灵活
缺点是:一旦关键字太多,速度会下降。
大家如果遇到过这种情况,可以探讨下。期待更好的解决方案
Javascript 相关文章推荐
javascript 拖动表格行实现代码
May 05 Javascript
Javascript面向对象编程
Mar 18 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
jQuery学习笔记之toArray()
Jun 09 Javascript
上传图片js判断图片尺寸和格式兼容IE
Sep 01 Javascript
利用原生JavaScript获取元素样式只是获取而已
Oct 08 Javascript
angularjs表格ng-table使用备忘录
Mar 09 Javascript
让div运动起来 js实现缓动效果
Jul 06 Javascript
JS库 Highlightjs 添加代码行号的实现代码
Sep 13 Javascript
JS实现的字符串数组去重功能小结
Jun 17 Javascript
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
一起深入理解js中的事件对象
Feb 06 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
Oct 26 #Javascript
自写的一个jQuery圆角插件
Oct 26 #Javascript
jQuery获取地址栏参数插件(模仿C#)
Oct 26 #Javascript
自制轻量级仿jQuery.boxy对话框插件代码
Oct 26 #Javascript
jquery ui resizable bug解决方法
Oct 26 #Javascript
HTML Dom与Css控制方法
Oct 25 #Javascript
Dom在ajax技术中的作用说明
Oct 25 #Javascript
You might like
PHP中redis的用法深入解析
2014/02/20 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
javascript从image转换为base64位编码的String
2014/07/29 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
python之yield表达式学习
2014/09/02 Python
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python中序列的修改、散列与切片详解
2017/08/27 Python
基于python log取对数详解
2018/06/08 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
怎么快速自学python
2020/06/22 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
社会学专业求职信
2014/07/17 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
汽车转让协议书
2015/01/29 职场文书
总经理司机岗位职责
2015/04/10 职场文书
东京审判观后感
2015/06/01 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL