← document.getElementsByName() JavaScript innerHTML属性 →

JavaScript document.getElementsByTagName()

原创 2026-03-15 JavaScript 已有人查阅

掌握 document.getElementsByTagName():标签名抓取的核心技术

在DOM操作的世界里,根据标签名来获取元素是基础中的基础。无论你是刚接触前端的小白,还是在代码号(https://www.ebingou.cn/)上学习编程的老手,document.getElementsByTagName() 这个方法一定会频繁出现在你的代码中。它的作用简单直接:根据HTML标签名返回所有匹配的元素。

方法定义与语法结构

getElementsByTagName() 是Document接口提供的方法,接收一个标签名作为参数,返回一个包含所有该标签元素的HTMLCollection实时。

标准写法:

document.getElementsByTagName("标签名")

参数"标签名"是字符串类型,比如"p"、"div"、"h2"等。需要注意,这个是实时(live)的,意味着如果页面中新添加了一个指定标签的元素,会自动更新长度。

示例一:统计文章段落数量

假设你在代码号的教程专区(https://www.ebingou.cn/jiaocheng/)写了一篇技术文章,想快速统计正文有多少个段落。下面这个例子就能搞定:

<!DOCTYPE html>
<html>
<head>
    <title>代码号学习:统计段落数</title>
</head>
<body>
    <h3>JavaScript DOM操作教程</h3>
    <p>getElementsByTagName是原生DOM方法,性能表现很不错。</p>
    <p>它返回的是HTMLCollection,跟NodeList有些区别。</p>
    <p>在开发中,经常用它来批量操作同类型元素。</p>
    <p>比如统一修改所有段落的样式,或者统计数量。</p>
    
    <button onclick="countParagraphs()">统计文章段落数</button>
    
    <script>
    function countParagraphs() {
        // 获取文档中所有的p标签
        var paragraphs = document.getElementsByTagName("p");
        alert("本文共包含 " + paragraphs.length + " 个段落");
    }
    </script>
</body>
</html>

执行过程拆解:

  1. 调用document.getElementsByTagName("p")后,浏览器会遍历整个DOM树,把所有<p>元素收集起来

  2. 返回的paragraphs是一个HTMLCollection对象,可以通过length属性获取数量

  3. 点击按钮触发弹窗,显示统计结果

示例二:统计不同级别标题数量

在的页面开发中,我们需要对不同层级的标题进行统计或操作。比如在源码页面(https://www.ebingou.cn/yuanma/)展示代码示例时,想了解h2和h3的使用情况:

<!DOCTYPE html>
<html>
<head>
    <title>代码号编程示例:标题统计</title>
</head>
<body>
    <h2>1. getElementsByTagName基础用法</h2>
    <p>这个方法接收一个参数,就是要查找的标签名。</p>
    
    <h2>2. 返回值的特点</h2>
    <p>返回的是HTMLCollection,不是数组,但有length属性。</p>
    
    <h3>2.1 实时性说明</h3>
    <p>动态添加元素后,会自动更新。</p>
    
    <h3>2.2 遍历方式</h3>
    <p>可以用for循环遍历,但不能直接用数组方法。</p>
    
    <h2>3. 实际应用场景</h2>
    <p>批量修改样式、表单处理、动态内容生成等。</p>
    
    <button onclick="countH2()">统计h2数量</button>
    <button onclick="countH3()">统计h3数量</button>
    
    <script>
    function countH2() {
        var h2List = document.getElementsByTagName("h2");
        alert("当前页面共有 " + h2List.length + " 个h2标题");
    }
    
    function countH3() {
        var h3List = document.getElementsByTagName("h3");
        alert("当前页面共有 " + h3List.length + " 个h3标题");
    }
    </script>
</body>
</html>

核心机制与个人经验

1. HTMLCollection和NodeList的区别

很多初学者分不清这两个概念。getElementsByTagName()返回的是HTMLCollection,而querySelectorAll()返回的是NodeList。两者较大的区别在于:

  • HTMLCollection是实时更新的,DOM变化会立即反映在中

  • NodeList是静态的,不会随DOM变化自动更新

个人建议: 如果需要处理动态添加的元素,比如通过AJAX加载新内容后要统一操作,用getElementsByTagName会更省心。如果只是想做个一次性查询,不希望后续操作影响结果,用querySelectorAll更合适。

2. 星号(*)的妙用

这个方法支持一个特殊参数——"*",代表匹配所有标签。比如想统计页面总共有多少个元素节点:

var allElements = document.getElementsByTagName("*");
console.log("页面元素总数:" + allElements.length);

这个技巧在处理大型页面分析时很实用,我在做代码号性能优化时经常用它来评估DOM规模。

3. 性能方面的考虑

相比querySelectorAll复杂的CSS选择器解析,getElementsByTagName的查找逻辑更简单直接,执行效率更高。在需要频繁操作的循环中,优先考虑使用这个方法。

4. 获取范围的灵活性

除了在document上调用,任何DOM元素也可以调用这个方法。比如:

var container = document.getElementById("article");
var paragraphsInArticle = container.getElementsByTagName("p");

这样只获取指定容器内的标签,避免全局搜索,代码意图更明确,性能也更好。

实际应用场景举例

在代码号的编程专区(https://www.ebingou.cn/biancheng/)里,我常用这个方法做这些事情:

  • 批量修改样式:获取所有<code>标签,统一添加语法高亮的类名

  • 表单重置:找到表单内所有的<input>,清空默认值

  • 目录生成:收集所有<h2><h4>标题,动态生成文章导航

  • 数据统计:分析页面中图片、链接、表格的使用情况

常见误区提醒

误区1:以为返回的是数组

// 错误示范
var ps = document.getElementsByTagName("p");
ps.forEach(function(p) { ... }); // 会报错,forEach不存在

// 正确做法
for(var i = 0; i < ps.length; i++) {
    // 处理每个p元素
}

// 或者转成数组
Array.from(ps).forEach(p => ...);

误区2:忽略标签名大小写
HTML标签名不区分大小写,但为了规范和可读性,建议统一用小写。

误区3:忘记检查返回是否为空
在对元素进行操作前,很好先判断length > 0,避免在空上做无意义的操作。

document.getElementsByTagName()是最基础也最实用的DOM操作方法之一。它简单直接,性能可靠,特别适合处理同类型元素的批量操作。虽然现在开发中有了更灵活的querySelectorAll,但掌握这个方法依然很重要,因为它能帮你更深入理解DOM的节点关系和特性。

← document.getElementsByName() JavaScript innerHTML属性 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号