0
点赞
收藏
分享

微信扫一扫

getElementsByTagName()

使用 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 开始兼容。


举报

相关推荐

0 条评论