基于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 相关文章推荐
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
Nov 06 Javascript
jQuery的链式调用浅析
Dec 03 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
Apr 04 Javascript
jQuery中removeData()方法用法实例
Dec 27 Javascript
如何用JS判断两个数字的大小
Jul 21 Javascript
深入理解Node.js 事件循环和回调函数
Nov 02 Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
Aug 18 Javascript
javascript函数的节流[throttle]与防抖[debounce]
Nov 15 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 Javascript
vue响应式原理与双向数据的深入解析
Jun 04 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
php expects parameter 1 to be resource, array given 错误
2011/03/23 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
无阻塞加载脚本分析[全]
2011/01/20 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
jQuery表格的维护和删除操作
2017/02/03 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
layui实现三级联动效果
2019/07/26 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
JavaScript实现10秒后再次获取验证码
2020/12/02 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
python实现输入数字的连续加减方法
2018/06/22 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
经典C++面试题一
2016/11/06 面试题
医学院学生的自我评价分享
2013/11/19 职场文书
yy司仪主持词
2014/03/22 职场文书
开工仪式策划方案
2014/05/23 职场文书
规范化管理年活动总结
2014/08/29 职场文书
信用卡工资证明范本
2014/10/17 职场文书
大学军训口号大全
2015/12/24 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
Python Django获取URL中的数据详解
2021/11/01 Python