node.js 批量替换a标签跳转链接

为客户临时赶得一个页面,为了方便,从网上下载的模板。在样式上和跳转上做了修改,暂时顶用

  1. 需求

    主要是a标签的href
    1 外链的跳转,修改为自己的网址
    2 相对路径跳转,不做修改
    3 # 或者 javascript:;不做修改

  2. 确定了这些,接下来就好做了,原本是计划写一个正则,直接匹配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程序节,祝各位程序猿们节日快乐!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值