document.links是document对象的只读属性,返回包含所有带href属性的a和area元素的实时htmlcollection,自动响应dom增删,不包含link等非超链接元素。

直接用 document.links 就能拿到页面里所有带 href 的超链接元素,它返回的是一个实时更新的 HTMLCollection,不用写选择器、也不用遍历,开箱即用。
document.links 是什么
它是 document 对象内置的只读属性,专为超链接设计。只要元素有 href 属性且属于可点击的链接语义(比如 <a></a>、<area>),就会被自动收录进来。
注意:它不依赖是否渲染在页面上,也不管是否隐藏或 disabled;但要求元素已存在于 DOM 中(动态插入后需确保已挂载)。
怎么快速获取和使用
获取后可以直接当类数组用,支持索引访问、length 和 forEach(需转成数组):
-
查总数:
document.links.length -
取第一个链接:
document.links[0],再用.href或.getAttribute('href')拿地址 -
遍历所有链接:
Array.from(document.links).forEach(link => console.log(link.href)) -
过滤外链:
Array.from(document.links).filter(link => link.hostname !== location.hostname)
和 querySelectorAll('a[href]') 有什么区别
document.links 更轻量、更语义化,且是动态集合——DOM 中新增或删除符合规则的链接,它的 length 和内容会自动响应;而 querySelectorAll('a[href]') 只抓 <a></a> 标签,漏掉 <area>,而且返回的是静态 NodeList,不会随 DOM 变化更新。
如果你只关心标准超链接数量统计、SEO 分析或简单跳转控制,document.links 是最省心的选择。
要注意的边界情况
某些场景下结果可能不符合预期:
- iframe 里的链接不会被包含,需单独查
iframe.contentDocument?.links - 同源策略限制下,跨域 iframe 内容无法访问
- JavaScript 动态创建但未插入 DOM 的
<a href="..."></a>元素,不会出现在document.links中 -
<link rel="stylesheet">这类标签虽然有href,但不属于“超链接”,不会被计入
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











