基于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 相关文章推荐
js每次Title显示不同的名言
Sep 25 Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
jQuery+css实现图片滚动效果(附源码)
Mar 18 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
javascript DIV实现跟随鼠标移动
Mar 19 Javascript
JS字符串的切分用法实例
Feb 22 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
Jun 20 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
JS实现指定区域的全屏显示功能示例
Apr 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
PHP写MySQL数据 实现代码
2009/06/15 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
JavaScript 面向对象的 私有成员和公开成员
2010/05/13 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
微信小程序之选项卡的实现方法
2017/09/29 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
Python的ORM框架SQLObject入门实例
2014/04/28 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
python读取图片任意范围区域
2019/01/23 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
Python实现自动访问网页的例子
2020/02/21 Python
利用Python自动化操作AutoCAD的实现
2020/04/01 Python
Django限制API访问频率常用方法解析
2020/10/12 Python
Python修改DBF文件指定列
2020/12/19 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
初中校园之声广播稿
2014/01/15 职场文书
房产委托公证书
2014/04/08 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
详解Vue的列表渲染
2021/11/20 Vue.js