使用 id 得到 HTML 标签每次只能得到 1 个,这非常不方便批量操作标签。JavaScript 提供了通过标签名得
到标签数组的方法,即 document.getElementsByTagName()方法。所谓的“标签名”是指如“div”、“p”、
“img”等单词,这些标签名都是小写字母,且没有短横和空格等其他字符。比如下面的语句将得到页面上所有
p 标签组成的数组:
document.getElementsByTagName("p")
注意到 Elements 中的字母 s 了吗?因为使用这个方法得到的不是 1 个标签,而是标签数组,这个字母 s
表示复数。
使用 document.getElementsByTagName()得到数组后,可以通过下标单独访问其中的某一个元素。当然
也可以使用 for 循环遍历数组,从而批量操作 HTML 元素们。
看一个简单的批量操作 HTML 元素的案例。
页面上放置数个 div 标签:
<h1></h1>
<h1></h1>
<h1></h1>
<h1></h1>
<h1></h1>
书写 JavaScript 程序,批量设置它们的内部文字:
//得到页面上所有 h1 标签,得到数组
var oTitles = document.getElementsByTagName("h1");
//遍历数组,批量操作
for(var i = 0 ; i < oTitles.length ; i++){
oTitles[i].innerHTML = "我是第" + i + "个 h1 标签"
}
程序运行结果如图 8-6 所示,所有 h1 标签内部文本被改变了。
程序中使用 document.getElementsByTagName("h1")得到了页面上所有 h1 组成的数组 oTitles。这个
变量我们以 s 结尾,暗示这是一个数组。既然是数组,就能够用 for 循环来遍历它的每一个项,依次设置它们
的内部文字。
想批量操作标签,就要书写 for 循环,绝对不能直接给一个数组设置 innerHTML 属性,这是没有任何效果
的,下面的语句是错误的:
document.getElementsByTagName("h1").innerHTML = "文字"; //错误!必须用 for 循环遍历数组!
需要注意的是,即使页面上只有一个 h1 标签,用 document.getElementsByTagName("h1")得到的也是一
个数组,只不过这个数组只有 1 项,用下标[0]来得到这一项。
在实际使用中,我们一般会先通过 id 得到某一个父元素,然后让这个元素再通过标签名得到它的内部元素,
逐步缩小选择的范围。比如,想选择一个 id 为 box 的盒子中的所有 p 标签,此时写法是:
var oBox = document.getElementById("box");
var ps = oBox. getElementsByTagName("p");
getElementsByClassName()
从 IE9 浏览器开始支持通过类名来得到元素数组,即 document.getElementsByClassName()方法。和
getElementsByTagName()方法类似,得到的是元素组成的数组。
来看一个简单演示。
页面上放置 3 个 div 标签,但是其中只有两个 div 标签有“box”类名:
<div class="box"> </div>
<div> </div>
<div class="box"></div>
书写 JavaScript 程序,选择得到所有携带 box 类名的盒子数组,弹出对话框显示数组长度:
var oBoxs = document.getElementsByClassName("box");
alert(oBoxs.length); //2
网页运行后,弹出对话框显示数字 2,表示得到了 2 个携带 box 类名的元素。
document.getElementsByClassName()从 IE9 开始兼容。