基于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 相关文章推荐
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
Apr 09 Javascript
JS限制文本框只能输入数字和字母方法
Feb 28 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
Aug 25 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
vue实现底部菜单功能
Jul 24 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 jQuery
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 jQuery
fetch 如何实现请求数据
Dec 20 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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
Laravel 5框架学习之表单
2015/04/08 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
jQuery使用手册之一
2007/03/24 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
JQuery控制DIV的选取实现方法
2016/09/18 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
网页中右键功能的实现方法之contextMenu的使用
2017/02/20 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
使用Vue 自定义文件选择器组件的实例代码
2020/03/04 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python使用Supervisor来管理进程的方法
2015/05/28 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python实现拓扑排序的基本教程
2018/03/11 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
python操作文件的参数整理
2019/06/11 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
大学应届毕业生个人求职信
2013/09/23 职场文书
公司综合部的成员自我评价分享
2013/11/05 职场文书
个人自荐书
2013/12/20 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
新学期开学演讲稿
2014/05/24 职场文书
实习单位意见
2015/06/04 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang