关于 getElementsByTagName

    .getElementById()不用多说,因为Id在一个页面内只会出现一次,所以这个返回值是唯一的。可是,.getElemensByTagName()就不一样了,因为标签名很可能会相同,所以返回的是一个数组。那么这个数组是如何取的呢,会否递归呢?

   做一个实验。如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript">
window.onload=function()
{
   var test = document.getElementById("test");
   var adang = test.getElementsByTagName("div");
   for(var i=0,n=adang.length;i<n;++i)
   {
    alert(adang[i].className);
   }
}
</script>
<body>
<div id="test">
<div class="a1">
   <div class="a2"><div class="a3"></div></div>
   <div class="a4"></div>
</div>
<div class="a5"></div>
</div>
</body>
</html>

如果.getElementsByTagName不能递归的话,那么就只会返回同在#test的标签根目录下的.a1和.a5了,如果能够递归的话,那么结果就是五个元素了。如果是后者,元素又是如何排列的呢?是先从儿子push起,然后再放孙子,孙子的儿子。。。还是把大儿子一家全push完,再push二儿子一家,三儿子一家呢?

我们运行一下程序就知道了,弹出的顺利是a1,a2,a3,a4,a5。也就是说,.getElementsByTagName方法会迭代,而且是大儿子一家,二儿子一家, 三儿子一家,一家一家顺序push完的。IE和FF下一致,都是如此。

原文地址:https://www.cnblogs.com/cly84920/p/4427128.html