getElementsByTagName是JavaScript中通过标签名获取元素的方法,返回动态HTMLCollection;支持document或元素调用,不区分大小写,可索引访问和遍历,但非数组,需转换后使用forEach等方法。

getElementsByTagName 是 JavaScript 中用于获取文档中所有指定标签名元素的原生方法,它返回一个动态的 HTMLCollection(不是数组,但可类数组访问),包含当前上下文节点及其后代中所有匹配的元素。
基本用法:从 document 或某个父元素开始查找
最常见的是从整个文档查找:
const divs = document.getElementsByTagName('div');
也可以从某个具体元素出发,只查找它的子树:
const container = document.getElementById('main');
const spans = container.getElementsByTagName('span');
注意:它不区分大小写,'DIV' 和 'div' 效果相同。
立即学习“Java免费学习笔记(深入)”;
HTMLCollection 的特点和常用操作
返回值是实时集合,意味着 DOM 变化会自动反映在该集合中(比如后续新增了同名标签,它会立刻包含)。
- 可用索引访问:
divs[0]、divs[1] - 支持
.length获取数量 - 不支持数组方法(如
forEach、map),需转成数组再用:Array.from(divs).forEach(el => el.style.color = 'red'); - 也可用扩展运算符:
[...divs].forEach(...)
与 querySelectorAll 的关键区别
如果你只需要静态快照或更灵活的选择器(如 div.active),推荐用 querySelectorAll:
-
getElementsByTagName('p')→ 返回动态 HTMLCollection -
document.querySelectorAll('p')→ 返回静态 NodeList,支持 CSS 选择器 - 性能上,
getElementsByTagName通常更快(尤其只按标签名查时),因为浏览器做了专门优化
常见误区提醒
容易忽略的几个点:
- 它只匹配直接子元素和所有后代,不是仅限第一层子元素(这点和
children不同) - 返回空集合时,
length === 0,但集合本身不是null或undefined - 不能传入多个标签名,如
getElementsByTagName('div, p')是错的;要实现类似效果,得用querySelectorAll('div, p')


















