惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
小众软件
小众软件
S
Schneier on Security
人人都是产品经理
人人都是产品经理
博客园_首页
L
LangChain Blog
D
Docker
B
Blog
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
C
Check Point Blog
WordPress大学
WordPress大学
博客园 - 聂微东
P
Palo Alto Networks Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tailwind CSS Blog
腾讯CDC
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
Help Net Security
Help Net Security
The Last Watchdog
The Last Watchdog
有赞技术团队
有赞技术团队
美团技术团队
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
爱范儿
爱范儿
S
Security @ Cisco Blogs
MyScale Blog
MyScale Blog
C
Cisco Blogs
P
Proofpoint News Feed
I
Intezer
Last Week in AI
Last Week in AI
The Register - Security
The Register - Security
IT之家
IT之家
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Latest news
Latest news
M
MIT News - Artificial intelligence
N
News | PayPal Newsroom
G
Google Developers Blog
Cloudbric
Cloudbric
T
Troy Hunt's Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recorded Future
Recorded Future
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog

博客园 - 我想我是青蛙

将golang程序注册为windows服务 CentOS上安装spark standalone mode(转载) 关于听歌这回事 c#读取apk 信息 golang 读取mongob数据写入sqlserver golang 通用Contains方法 golang读取文件信息插入mongodb PetaPoco介绍 白话MongoDB(三)(转载) 白话MongoDB(二)(转载) 白话MongoDB(一) (转载) 针对firefox ie6 ie7 ie8的css样式hack (转载) 好久不写日志了,现在开始,好好写了。。 sharepoint 查询calendar recurrence sharepoint之lookup字段 sharepoint获取Audiences 获取exchangeserve的calendar的item sharepoint错误处理 c#上传下载ftp(支持断点续传)
给文章加入关键字链接
我想我是青蛙 · 2010-10-26 · via 博客园 - 我想我是青蛙

         最近在做一个网站,遇到需要给网站内所有的文章加关键字链接的问题,我们在浏览一些网站的文章的时候,会发现文章里面的某些关键字是加了链接的,并且高亮显示。

         开始技术部门打算在后台添加或者修改文章的时候,把文章里面的关键字替换为<a>标签。但是这样就出现一些问题

        如果新添加一个关键字,是不是所有的文章又要重新过滤一边。把新关键字替换掉。

        如果修改了关键字的名字或者是修改了关键字的链接地址,那么又要重新过滤所有文件。

        综合了一些情况后,感觉使用后台解决的方案行不通。于是我想到了前台脚本解决

   思路:

         关键字链接的信息任然存放在数据库中,在数据库中有一些字段来保存关键字的信息。

         当用户添加,删除,更新关键字的时候,在后台生成一个js文件,格式如下:

代码

var wordlinkdata='[{"WordLinkAlias":"wordlinkReplace4","WordLinkUrl":"http://www.sohu1.com","WordLinkName":"你大爷21"},{"WordLinkAlias":"wordlinkReplace7","WordLinkUrl":"http://cnblogs.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 =="") {
returnthis.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个),页面的速度会下降

  总结:这种方式的优势是,不需要对以前的文章做任何的修改,添加,删除,修改很灵活

          缺点是:一旦关键字太多,速度会下降。

          大家如果遇到过这种情况,可以探讨下。期待更好的解决方案