基于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 相关文章推荐
Javascript 中的 call 和 apply使用介绍
Feb 22 Javascript
javascript 函数及作用域总结介绍
Nov 12 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
使用jquery实现放大镜效果
Sep 02 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
jQueryUI中的datepicker使用方法详解
May 25 Javascript
js鼠标移动时禁止选中文字
Feb 19 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
浅谈Vue响应式(数组变异方法)
May 07 Javascript
如何在Vue.js中实现标签页组件详解
Jan 02 Javascript
vue项目中微信登录的实现操作
Sep 08 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对象Object的概念 介绍
2012/06/14 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
2020/04/29 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
基于jquery的动态创建表格的插件
2011/04/05 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
2016/05/25 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
纯js实现画一棵树的示例
2017/09/05 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
玩转python爬虫之URLError异常处理
2016/02/17 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python梯度下降法的简单示例
2018/08/31 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
单位考核鉴定意见
2015/06/05 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL
图神经网络GNN算法
2022/05/11 Python