基于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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
Sep 20 Javascript
引入JS文件IE6报语法错误或缺少对象问题的解决方法
Jan 09 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
Apr 15 Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
Bootstrap table使用方法总结
May 10 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
js实现消灭星星(web简易版)
Mar 24 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
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中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
javascript实现简单加载随机色方块
2015/12/25 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
Python中random模块用法实例分析
2015/05/19 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
使用python对excle和json互相转换的示例
2018/10/23 Python
python爬虫超时的处理的实例
2018/12/19 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
电教室标语
2014/06/20 职场文书
共青团员自我评价范文
2014/09/14 职场文书
工作散漫检讨书
2014/09/16 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
中学生思想品德评语
2014/12/31 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
入队仪式主持词
2015/07/04 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电