基于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 相关文章推荐
Prototype Selector对象学习
Jul 23 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
jquery插件制作 自增长输入框实现代码
Aug 17 jQuery
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
Aug 15 Javascript
微信小程序 配置文件详细介绍
Dec 14 Javascript
详解Node.js 命令行程序开发教程
Jun 07 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 Javascript
小程序指纹验证的实现代码
Dec 04 Javascript
JS 封装父页面子页面交互接口的实例代码
Jun 25 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
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
Webkit的跨域安全问题说明
2011/09/13 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python实现数独算法实例
2015/06/09 Python
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
关于python中remove的一些坑小结
2021/01/04 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
Servlet面试题库
2015/07/18 面试题
会计助理的岗位职责
2013/11/29 职场文书
迎八一活动主题
2014/01/31 职场文书
军训教官感言
2014/03/02 职场文书
团队精神口号
2014/06/06 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
小学班主任评语
2014/12/29 职场文书
清明节寄语2015
2015/03/23 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
JS数组去重详情
2021/11/07 Javascript
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫