基于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 相关文章推荐
比较简单的异步加载JS文件的代码
Jul 18 Javascript
JavaScript代码简单实现求杨辉三角给定行的最大值
Oct 29 Javascript
jquery 图片缩放拖动的简单实例
Jan 08 Javascript
Javascript的闭包详解
Dec 26 Javascript
jQuery 中DOM 操作详解
Jan 13 Javascript
js实现仿Windows风格选项卡和按钮效果实例
May 13 Javascript
jQuery实现Tab菜单滚动切换的方法
Sep 21 Javascript
js实现无缝滚动特效
Dec 20 Javascript
JavaScript地理位置信息API
Jun 11 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
DWR内存兼容及无法调用问题解决方案
Oct 16 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
python 实现插入排序算法
2012/06/05 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
python实现的config文件读写功能示例
2019/09/24 Python
Python原始套接字编程实例解析
2020/01/29 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
教师求职推荐信范文
2013/11/20 职场文书
三年级语文教学反思
2014/02/01 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
初中中等生评语
2014/12/29 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
MongoDB使用场景总结
2022/02/24 MongoDB