基于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中的几个关键概念的理解-原型链的构建
May 12 Javascript
js中更短的 Array 类型转换
Oct 30 Javascript
jQuery判断密码强度实现思路及代码
Apr 24 Javascript
jquery1.10给新增元素绑定事件的方法
Mar 06 Javascript
JavaScript结合AJAX_stream实现流式显示
Jan 08 Javascript
快速掌握Node.js事件驱动模型
Mar 21 Javascript
微信小程序  audio音频播放详解及实例
Nov 02 Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 Javascript
Vue 2.0 服务端渲染入门介绍
Mar 29 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
Aug 16 Javascript
Vue2.0用户权限控制解决方案的示例
Feb 10 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 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使用ftp实现文件上传与下载功能
2017/07/21 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
如何实现移动端浏览器不显示 pc 端的广告
2015/10/15 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
flask应用部署到服务器的方法
2019/07/12 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
电子商务自荐书范文
2014/01/04 职场文书
车间核算员岗位职责
2014/07/01 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
外国人来华邀请函
2015/01/31 职场文书
导游词之上海豫园
2019/10/24 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
Java存储没有重复元素的数组
2022/04/29 Java/Android