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 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
Script的加载方法小结
Jan 12 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
JS自定义选项卡函数及用法实例分析
Sep 02 Javascript
基于Javascript实现返回顶部按钮
Feb 29 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
利用js定义一个导航条菜单
Mar 14 Javascript
tab栏切换原理
Mar 22 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
vue文件树组件使用详解
Mar 29 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
ES10 特性的完整指南小结
Mar 04 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
php5 pdo新改动加载注意事项
2008/09/11 PHP
详解php中反射的应用
2016/03/15 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
使用JavaScript为Kindeditor自定义按钮增加Audio标签
2016/03/18 Javascript
利用原生JS自动生成文章标题树的实例
2016/08/22 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
jQuery使用方法
2017/02/04 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
解决Django no such table: django_session的问题
2020/04/07 Python
python Xpath语法的使用
2020/11/26 Python
美国知名生活购物网站:Goop
2017/11/03 全球购物
合同专员岗位职责
2013/12/18 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
政风行风整改报告
2014/11/06 职场文书
优秀教研组申报材料
2014/12/26 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
读书笔记怎么写
2015/07/01 职场文书
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB