基于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代码
Mar 16 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
form表单只提交数据而不进行页面跳转的解决方案
Sep 18 Javascript
js转义字符介绍
Nov 05 Javascript
jQuery 无刷新分页实例代码
Nov 12 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
微信小程序 火车票查询实例讲解
Oct 17 Javascript
jQuery利用FormData上传文件实现批量上传
Dec 04 jQuery
微信小程序出现wx.getLocation再次授权问题的解决方法分析
Jan 16 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
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
js实现简单的倒计时
2021/01/28 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
python使用socket远程连接错误处理方法
2015/04/29 Python
python验证码识别的实例详解
2016/09/09 Python
Python正则简单实例分析
2017/03/21 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
python字典改变value值方法总结
2019/06/21 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
pytorch 求网络模型参数实例
2019/12/30 Python
Python库安装速度过慢解决方案
2020/07/14 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
电子信息毕业生自荐信
2013/11/16 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
保姆聘用合同
2015/09/21 职场文书
公司岗位说明书
2015/10/08 职场文书
周末问候语大全
2015/11/10 职场文书
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python