javascript中getElementsByTagName问题!

问题一:
在html文档中去除所有标签,放上下面的代码一,为什么弹出来的对话框显示的不是1?而是大于1,而且IE8显
示的为4,其他浏览器显示的为3?为神马??求高人解答!放上代码二,就都显示1了,为神马??
【代码一】
<script type="text/javascript">
var a=document.getElementsByTagName("*");
alert(a.length);
</script>
【代码二】
<script type="text/javascript">
var a=document.getElementsByTagName("script");
alert(a.length);
</script>
问题二:
看如下代码:
【代码三】
<html>
<head>
<title> New Document </title>
<style></style>
</head>
<body>
<hr/>
</body>
</html>
<script type="text/javascript">
var a=document.getElementsByTagName("head");
var b=a[0].getElementsByTagName("*");
alert(b.length);
</script>
这段代码在所有浏览器上运行的结果为:2
把【var a=document.getElementsByTagName("head");】中的"head"换为"body"
在所有的浏览器上运行的结果为:2
再把【var a=document.getElementsByTagName("head");】中的“head”换为"html"
在所有的浏览其中的运行结果为:6
【问】为什么不是2+2=4而是6?????
问题三:
看如下代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<script type="text/javascript">
var a=document.getElementsByTagName("*");
alert(a.length);
</script>
在IE8中的运行结果为5,去掉doctype标签后,运行结果为4.
在非IE浏览器中,不管是否去掉doctype标签,运行结构都为3.
是不是说明,IE把doctype标签页作为一个网页元素,而其他浏览器不这样认为?
虽然问的问题有点扯淡,但还是希望各位高手帮忙解答一下!

问题1:这跟浏览器的特性有关。大多数浏览器会在HTML文件没有html,body,标签时自动补全标签。会自动补全很多缺失标签,同时它也会自动闭合或者删除html文件中各种没有异常的标签。

如果要想查看的话,可以给firefox附加一个web developer组件,重启后点击“查看源码(view resource)-处理后的源码(view gerenated resource)”就会发现标签被补全了。
同样的,
在opera里使用自带的dragonfly工具,也可以看到html和body标签被补全了。
至于IE8,你按F12也会出现自带的开发人员工具查看html源码。

问题2:实际上你的html标签用的并不正规,html是应该包含整个页面代码的,而你强行把html提前结束,所以浏览器自动更正了这个错误。同样可以用我上面说的开发工具来看实际代码。

问题3:对doctype的处理,各浏览器也不同,用用前面的工具就能发现为什么了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-11
这个你要用下js调试工具就知道了,ie8也自带的调试工具,或者用火狐谷歌的都有。
问题:
1.1 ie9以下的浏览器会把body当成一个节点,而ie9以及其他浏览器不会。所以是4个节点分别是html、head、scrit和body。你没写其他三个标签页面上默认会给的。
1.2 你限定了script标签当然只有1
2 head里面的是title+style=2。body里面的是hr+scrpt=2,script写html外面默认是算body里面。html的话就是总的head+title+style+body+hr+script=6
3 在ie9以下的ie浏览器的确算一节点,但节点名称并不是doctype或者!doctype而是!。

总的来说ie浏览器从ie9开始比较向标准靠拢了,不过你些情况对于一般的兼容开发没什么影响,很少会用document.getElementsByTagName("*");来获取节点,获取节点方面的兼容性主要在ie和其他浏览器的空白节点处理问题上。
第2个回答  推荐于2018-04-24
问题有点乱,一个一个来回答:

问题一:对话框显示的不是1?而是大于1,而且IE8显示的为4,其他浏览器显示的为3?
因为*代表所有元素,IE会多加一个title元素
IE中 html head script title
其它 html head script

问题二:放上代码二,就都显示1了,为神马??
因为只有一个script元素

问题三:代码三 在所有浏览器上运行的结果为:2
和问题二一样,因为head标签里只有title和style两个元素

问题四:"head"换为"body"在所有的浏览器上运行的结果为:2
因为body标签里只有hr和script两个元素

问题五:“head”换为"html"在所有的浏览其中的运行结果为:6
因为head里面有2个元素;加上body里面2个元素;再加上head和body两个元素,是6个

问题六:是不是说明,IE把doctype标签页作为一个网页元素,而其他浏览器不这样认为?
IE把doctype标签作为一个网页元素,而且是作为一个注释节点

楼主可以用代码输出元素名称,这样就很清楚了,代码如下:
<script type="text/javascript">
var a=document.getElementsByTagName("*");
for(var i=0; i<a.length; i++)
{ alert(a[i].tagName); }
</script>
第3个回答  2012-08-11
问题好长。。。一个一个回答吧。。。
问题1: 就算去掉其它表情,浏览器也是会自动补齐最基本的。非IE会补上 html head body 这3个标签,而IE浏览器会在head里额外补一个title。 就是:
非IE浏览器----------------------------------------------------
<html>
<head>
<script type="text/javascript">
var a=document.getElementsByTagName("*");
alert(a.length);
</script>
</head>
<body></body>
</html>

非IE浏览器----------------------------------------
<html>
<head>
<title></title>
<script type="text/javascript">
var a=document.getElementsByTagName("*");
alert(a.length);
</script>
</head>
<body></body>
</html>

这样看上去标签 ie里应该是5个,而非IE 为4个。 但为什么又少一个了呢。
这是因为运行这段js时,浏览器还没有加载到body标签,所以少一个了。
如果改成
window.onload = function() {

var a=document.getElementsByTagName("*");
alert(a.length);
}
那么 IE浏览器就正常显示 5, 非IE显示4。

。。。公司一个会开了好久。。。回来发现这么多人回答了。那后面我就省了,他们说的差不多就这意思
相似回答