目的地-Destination 前程似锦、未来可期、寻得良人、共赴白头,祝你也祝我。
博主 目的地-Destination
沪ICP备16003146号-2沪公网安备 31010702004922号萌ICP备20238488号博主 一小时前 在线自豪地使用 Typecho 建站搭配使用 🌻Sunny 主题当前在线 1 人
歌曲封面 未知作品

沪ICP备16003146号-2

沪公网安备 31010702004922号

萌ICP备20238488号

网站已运行 7 年 329 天 15 小时 4 分

Powered by Typecho & Sunny

2 online · 52 ms

Title

将文章内的超链接改成卡片式链接展示

Chrison

·

·

317次阅读
烂笔头
Article
⚠️ 本文最后更新于2023年02月13日,已经过了604天没有更新,若内容或图片失效,请留言反馈
当文章内引入内联或外联后,网页显示出来,会和普通文字混在一起,看起来也不是很方便。
目前知乎或者其他网站上,都采用了【卡片式链接】的展示方式,与普通链接相比,卡片式链接不仅美观,还可以展示更多信息,如:标题、图片、网址等。

超链接效果图

iShot_2023-02-13_19.55.50.png

卡片式效果图

iShot_2023-02-13_20.34.12.png

CardLink

CardLink

引入JS

博客的话,采用CDN JS的方式。放在head标签的位置。
npm相关的方式,请参见GitHub。

♾️ text 代码:
<script src="https://cdn.jsdelivr.net/npm/cardlink"></script>

调用JS

放在<body></body>之间。
标准方式:为<article></article>标签下所有打开新标签窗口的a标签生成卡片链接。

♾️ text 代码:
<script>
    cardLink(document.querySelectorAll('article a[target=_blank]'))
</script>

当前主题方式:即为divid=post-content内的超链接,采用卡片式。

♾️ text 代码:
<script>
    cardLink(document.querySelectorAll('#post-content a[target=_blank]'))
</script>

原理

1.请求目标链接的 HTML
2.得到结果,使用 new DOMParser() 解析请求结果的 HTML 内容,并使用 dom API 解析获取信息 (如果你厉害你可以使用正则表达式匹配)
3.编辑卡片式链接的 HTML 以及 CSS 样式
4.将解析到的信息插入之前编辑好的 HTML 模板中,并渲染到当前页面

问题

由于这是前端发送请求获取 HTML,可能部分网站会存在跨域 (CORS) 问题,所以 cardLink 允许你使用代理服务器去请求目标网站的 HTML

解决

1.cardLink.server => 在执行cardLink 之前预设代理服务器
2.只有发生跨域请求时,cardLink 才会将请求发送到代理服务器

♾️ text 代码:
<script>
  cardLink.server = 'https://api.allorigins.win/raw?url='
  cardLink(document.querySelectorAll('#post-content a[target=_blank]'))
</script>

大功告成

其他使用方式

♾️ text 代码:
<script>
  // 为指定的a标签设置cardlink属性,最后调用cardLink()
  document.querySelectorAll('article a[target=_blank]').forEach((el) => {
    el.setAttribute('cardlink', '')
  })

  // 或
  document.querySelector('a#example').setAttribute('cardlink', '')

  // 默认会对页面上所有a[cardlink]生成卡片链接
  cardLink()
</script>
现在已有 0 条评论,0 人点赞
Comment:共0条
发表
搜 索 消 息 足 迹
你还不曾留言过..
你还不曾留下足迹..
博主 不再显示
博主