基于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 相关文章推荐
Z-Blog中用到的js代码
Mar 15 Javascript
js继承 Base类的源码解析
Dec 30 Javascript
javascript伸缩型菜单实现代码
Nov 16 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
快速搭建React的环境步骤详解
Nov 06 Javascript
Angular7.2.7路由使用初体验
Mar 01 Javascript
Electron-vue开发的客户端支付收款工具的实现
May 24 Javascript
ES6中Symbol、Set和Map用法详解
Aug 20 Javascript
JavaScript实现随机点名程序
Mar 25 Javascript
js实现简单的轮播图效果
Dec 13 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的FTP学习(四)
2006/10/09 PHP
php URL编码解码函数代码
2009/03/10 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
js 单击式的下拉菜单效果实例
2013/08/13 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
javascript验证身份证号
2015/03/03 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
python实现学生管理系统开发
2020/07/24 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
小学生演讲稿
2014/01/12 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书