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代码
Mar 07 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
深入分析js中的constructor和prototype
Apr 07 Javascript
javascript中setAttribute()函数使用方法及兼容性
Jul 19 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
Apr 26 Javascript
利用纯js + transition动画实现移动端web轮播图详解
Sep 10 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
Dec 20 Javascript
解决vue2中使用axios http请求出现的问题
Mar 05 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 Javascript
解决echarts数据二次渲染不成功的问题
Jul 20 Javascript
js实现tab栏切换效果
Aug 02 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
2.PHP入门
2006/10/09 PHP
php图片缩放实现方法
2014/02/20 PHP
PHP合并静态文件详解
2014/11/14 PHP
PHP strripos函数用法总结
2019/02/11 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
python连接MySQL数据库实例分析
2015/05/12 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Python turtle库的画笔控制说明
2020/06/28 Python
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
办公室副主任职责范本
2014/03/08 职场文书
小小商店教学反思
2014/04/27 职场文书
2014年采购员工作总结
2014/11/18 职场文书
创先争优承诺书
2015/01/20 职场文书
民事上诉状范文
2015/05/22 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
大学新生入学感想
2015/08/07 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
python中的random模块和相关函数详解
2022/04/22 Python