最直接方法是用document.queryselectorall('a')获取链接元素,再通过array.from转数组并提取textcontent,需trim()去空格、filter去空字符串;html字符串需用domparser解析;textcontent会包含子元素文本,如需仅直接文本须遍历childnodes。

用 document.querySelectorAll 提取所有链接文字最直接
如果你已把 HTML 加载进浏览器(比如在页面脚本或 DevTools 控制台中),document.querySelectorAll('a') 是最快拿到所有链接元素的方式。它返回 NodeList,需转数组再提取文本:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
-
Array.from(document.querySelectorAll('a'), el => el.textContent.trim())—— 一行搞定,trim()防止换行缩进混入空字符串 - 别用
innerHTML:它会把&、等实体原样带出来,变成“ ”而不是空格 - 如果某些
@#@#@#@#@#@#@#@#@#@0或@#@#@#@#@#@#@#@#@#@1这类无可见文字的链接,直接.textContent会得到空字符串,导致数组里出现""。- 加过滤:
.filter(text => text.length > 0),避免后续遍历时意外跳过或报错 - 想保留结构信息(比如标记“此处为图片链接”),可 fallback 到
el.getAttribute('title') || el.getAttribute('aria-label') - 注意:
el.innerText在这种情况下也为空,且会触发重排,没额外收益
从 HTML 字符串中提取链接文字(未插入 DOM)
如果你手头只有 HTML 字符串(比如 API 返回、爬虫抓取结果),不能直接调
textContent,必须先解析成节点。- 推荐用
DOMParser:const doc = new DOMParser().parseFromString(htmlStr, 'text/html'); const texts = Array.from(doc.querySelectorAll('a'), el => el.textContent.trim()).filter(t => t); - 别用正则匹配
@#@#@#@#@#@#@#@#@#@2,你只想拿 “Click now”,不想要 “here”。-
textContent天然包含子元素文本,做不到“仅直接子文本”——这是它的设计行为,不是 bug - 真要隔离,得手动遍历
el.childNodes:Array.from(el.childNodes).filter(n => n.nodeType === Node.TEXT_NODE).map(n => n.textContent.trim()).filter(t => t) - 注意:HTML 源码里的换行缩进也会生成
TEXT_NODE,所以filter(t => t)不能省
querySelectorAll+textContent,但空链接、HTML 字符串解析、直接文本 vs 子文本这些边界,一不留神就让结果错位或崩溃。尤其在批量处理时,trim()和空值过滤不是可选项,是必填项。 -
- 加过滤:
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










