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 相关文章推荐
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
jquery实现树形菜单完整代码
Dec 29 Javascript
Bootstrap警告(Alerts)的实现方法
Mar 22 Javascript
一个简易时钟效果js实现代码
Mar 25 Javascript
vue.js简单配置axios的方法详解
Dec 13 Javascript
jquery动态添加带有样式的HTML标签元素方法
Feb 24 jQuery
Javascript的console['']常用输入方法汇总
Apr 26 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
详解JavaScript中的函数、对象
Apr 01 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 Javascript
80行代码写一个Webpack插件并发布到npm
May 24 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
使用URL传输SESSION信息
2015/07/14 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
解决FLASH需要点击激活的代码
2006/12/20 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
说说如何在Vue.js中实现数字输入组件的方法
2019/01/08 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python 中的int()函数怎么用
2017/10/17 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python Collatz序列实现过程解析
2019/10/12 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
简短证婚人证婚词
2014/01/09 职场文书
横店影视城导游词
2015/02/06 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
教你怎么用Python生成九宫格照片
2021/05/20 Python
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS