JS批量替换内容中关键词为超链接


Posted in Javascript onFebruary 20, 2017

懂点seo的人都知道要给内容中关键词加上链接,形成站内锚文本链接,这对seo有很大的帮助。

思路就是在数据库中录入若干个关键词和关键词对应的链接,当然链接可以根据关键词的id自动生成,或者直接用关键词作为链接参数,如?tag=1、?kw=关键词。

这个问题不是简单的一个批量replace那么简单,要考虑到已经存在的超链接,不能将里面的文字再次替换为超链接,还有就是图片的alt属性,或者其他标签的title属性,里面的文字也不该被替换。

见下面的HTML代码:

【<a href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" >九寨沟概要</a>】九寨沟位于四川省阿坝州九寨沟县境内,5A景点,世界自然遗产,有"五绝"之景色,我感到最绝的是海子,此生不能不去的景区。一年四季适合游,秋天是最美的。
<img src="" alt="九寨沟图片" title="九寨沟图片" />

这种情况你不能直接将九寨沟替换为超链接啊,不然第一个链接就会被替换为链接中包含链接,然后是图片上的alt和title也替换了一个链接上去,这肯定是不符合HTML规范的。

情景一:排除属性中的关键词

匹配的正则为:关键词[^<]*>,所以排除这个关键词的正则为:关键词?!([^<]*>)。

情景二:排除链接中的关键词

匹配的正则为:关键词[^<]*<\/a>,所以排除这个关键词的正则为:关键词?!([^<]*<\/a>)。

整合两种情况的结果为:var reg=/关键词(?!([^<]*>)|([^<]*<\/a>))/ig;

废话不多说,最后给出一个完整的批量替换实例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
<div id="content">
【<a href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" >九寨沟概要</a>】九寨沟位于四川省阿坝州九寨沟县境内,5A景点,世界自然遗产,有"五绝"之景色,我感到最绝的是海子,此生不能不去的景区。一年四季适合游,秋天是最美的。
<img src="" alt="九寨沟图片" title="九寨沟图片" />
</div>
<hr />
<div id="new">
</div>
<script>
var c=document.getElementById("content").innerHTML;
//var reg=/九寨沟(?!([^<]*>)|([^<]*<\/a>))/ig;
var json=[
  {'key':'九寨沟','url':'/九寨沟/'}
  ,{'key':'景点','url':'/景点/'}
  ,{'key':'景区','url':'/景区/'}
 ];
var reg;
for(var i=0;i<json.length;i++){
 var j=json[i];
 reg=new RegExp(j.key+"(?!([^<]*>)|([^<]*<\/a>))","ig");
 c = c.replace(reg,"<a href='"+j.url+"'>"+j.key+"</a>");
}
document.getElementById("new").innerHTML=c;
</script>
</body>
</html>

替换后的效果:

JS批量替换内容中关键词为超链接

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript css float属性的特殊写法
Nov 13 Javascript
javascript实现TreeView 无刷新展开的实例代码
Jul 13 Javascript
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 Javascript
javascript的创建多行字符串的7种方法
Apr 29 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
jQuery回调函数的定义及用法实例
Dec 23 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 Javascript
javascript设计模式--策略模式之输入验证
Nov 27 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 Javascript
js判断密码强度的方法
Mar 18 Javascript
网页中右键功能的实现方法之contextMenu的使用
Feb 20 #Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
Feb 20 #Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 #Javascript
Bootstrap table右键功能实现方法
Feb 20 #Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 #Javascript
Bootstrap table 定制提示语的加载过程
Feb 20 #Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 #Javascript
You might like
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
微信小程序实现文件预览
2020/10/22 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python中itertools模块用法详解
2014/09/25 Python
Python的高阶函数用法实例分析
2019/04/11 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
小学二年级评语
2014/04/21 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
学习经验交流会策划书
2015/11/02 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang