下面是一个简单的html页面,用于输出input元素的所有属性:
1. 在firefox,opera,safari,chrome下面都会输出三个设值的属性:type、onclick、value
2. 在IE6下面会输出108个属性,即ie支持的element元素的所有属性
3. 在IE7和IE8Beta1下运行的时候,在输出第一个属性language后就会出错。
1. <html>
2. <head>
3. <script type="text/javascript">
4. function buttonClick(){
5. var element = document.getElementsByTagName('input')[0];
6. var attris = element.attributes;
7. alert(attris.length);
8. //var attributes = '';
9. //var len = attris.length;
10. for(i =0; i < attris.length; i++)
11. {
12. //attributes += attris.item(i).name;
13. document.write(attris.item(i).name + ‘<br/>’ );
14. }
15. //document.write(attributes);
16. }
17. </script>
18. </head>
19. <body>
20. <input type="button" οnclick="buttonClick()" value="button"/>
21. </body>
22. </html>
23.
24.
下面在IE7下面通过修改代码对出错原因做一些推断:
à修改1:根据属性的个数输出1,结果在输出的一个1之后便会出错
1. function buttonClick(){
2. var element = document.getElementsByTagName('input')[0];
3. var attris = element.attributes;
4. alert(attris.length);
5. for(i =0; i < attris.length; i++)
6. {
7. document.write(1);
8. }
9. }
10.
à修改2:同样是根据属性的个数输出1,但attris.length的值预先存储在变量中通过该变量进行循环,结果正常输出108个1.
1. function buttonClick(){
2. var element = document.getElementsByTagName('input')[0];
3. var attris = element.attributes;
4. alert(attris.length);
5. var len = attris.length;
6. for(i =0; i < len; i++)
7. {
8. document.write(1);
9. }
10. }
11.
12.
à修改3:输出所有属性,但attris.length的值预先存储在变量中通过该变量进行循环,结果同样在输出第一个属性language之后便出错
1. function buttonClick(){
2. var element = document.getElementsByTagName('input')[0];
3. var attris = element.attributes;
4. alert(attris.length);
5. var len = attris.length;
6. var outStr = ‘’;
7. for(i =0; i < len; i++)
8. document.write(attris.item(i).name + ‘<br/>’ );
9. }
10.
11.
à修改4:输出所有属性,但输出之前先在变量中存储所有属性值,结果正确输出所有属性名
1. function buttonClick(){
2. var element = document.getElementsByTagName('input')[0];
3. var attris = element.attributes;
4. alert(attris.length);
5. var len = attris.length;
6. var outStr = ‘’;
7. for(i =0; i < len; i++)
8. outStr +=attris[i].item(i).name;
9. document.write(outStr);
10. }
11.
12.
由以上五个例子,是不是可以得出以下的推断:在第一次调用document.write()之后,原来的dom元素的变量已经被释放。
源文地址:http://www.100pchome.com/plus/view.php?aid=827
更多文章请登陆个人电脑之家(www.100pchome.com)