基于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与vbscript数据共享
Jan 09 Javascript
jQuery chili图片远处放大插件
Nov 30 Javascript
JavaScript Event学习第七章 事件属性
Feb 07 Javascript
js和jquery对dom节点的操作(创建/追加)
Apr 21 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
基于javascript实现句子翻牌网页版小游戏
Mar 23 Javascript
AngularJS实现进度条功能示例
Jul 05 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
Aug 21 Javascript
Jquery的autocomplete插件用法及参数讲解
Mar 12 jQuery
简述Vue中容易被忽视的知识点
Dec 09 Javascript
如何通过vscode运行调试javascript代码
Jul 24 Javascript
JavaScript中arguments的使用方法详解
Dec 20 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实现ping
2006/10/09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
php htmlspecialchars加强版
2010/02/16 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
php正则修正符用法实例详解
2016/12/29 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
js活用事件触发对象动作
2008/08/10 Javascript
ppk谈JavaScript style属性
2008/10/10 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
Angular2 组件间通过@Input @Output通讯示例
2017/08/24 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python装饰器简单用法实例小结
2018/12/03 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
Python 从attribute到property详解
2020/03/05 Python
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
python+opencv实现目标跟踪过程
2022/06/21 Python