为客户临时赶得一个页面,为了方便,从网上下载的模板。在样式上和跳转上做了修改,暂时顶用
-
需求
主要是a标签的href
1 外链的跳转,修改为自己的网址
2 相对路径跳转,不做修改
3 # 或者 javascript:;不做修改 -
确定了这些,接下来就好做了,原本是计划写一个正则,直接匹配a标签的内容,将这几个条件去除掉,但是正则功力有限,加上想到了前两天写的小爬虫,决定用node试一试,核心代码如下:
const fs = require('fs')
const cheerio = require('cheerio')
const pathName = './'
const fileOption = {
encoding: 'utf-8'
}
let fileList = {}
// 读取当前目录所有文件
fs.readdir(pathName, function(err, files) {
if (err) return
for (let file of files) {
let fileClass = file.split('.')
let fileType = fileClass[fileClass.length - 1]
if (fileType == 'html') {
// 日志
fileList[fileClass[0]] = []
// 读取文件
fs.readFile(pathName + file, fileOption, (error, data) => {
if (error) return
setHtml(data, file)
})
}
}
})
// 设置html
function setHtml(html, fileName) {
//将html字符串转换为jsdom 方便操作
let $ = cheerio.load(html, { decodeEntities: false })
$('a').each(function name(i, v) {
let _href = $(v).attr('href')
let _replaceHref = replaceHref(_href)
if (_href && _replaceHref) {
// 日志记录
fileList[fileName.split('.')[0]].push(
_href + ' 替换为=====>>>>>> ' + _replaceHref
)
// 替换href
$(v).attr('href', _replaceHref)
}
})
fs.writeFile(pathName + fileName, $.html(), 'utf-8', function(error) {
if (error) {
console.log('写入失败')
} else {
console.log(fileName, '替换链接成功')
}
})
// 存储写入日志
fs.writeFile('./log.js', JSON.stringify(fileList), fileOption, function(
params
) {})
}
// 替换链接
function replaceHref(href) {
if (/(^\.\/|^\/)/.test(href) || href == '#' || href == 'javascript:;') {
// 如果是./ 或 /开头的页面 或者是 # 或者 javascript:; 不操作
return false
} else if (/saas/.test(href)) {
return false
}
return 'https://www2.smartwork.link/manager/#/myMeet'
}
核心部分已经做了注释,今天是1024程序节,祝各位程序猿们节日快乐!