IE7中document.write()的问题

本文探讨了在IE7浏览器中遍历DOM元素属性时出现的错误现象,并通过四个不同修改版本的代码示例,分析了导致错误的原因。实验发现,直接使用DOM属性长度进行循环会导致错误,而将长度值存储到变量中则能正常运行。
摘要由CSDN通过智能技术生成

下面是一个简单的html页面,用于输出input元素的所有属性:

1.      firefoxoperasafarichrome下面都会输出三个设值的属性:typeonclickvalue

2.      IE6下面会输出108个属性,即ie支持的element元素的所有属性

3.      IE7IE8Beta1下运行的时候,在输出第一个属性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>
下面在 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. }

à修改2:同样是根据属性的个数输出1,但attris.length的值预先存储在变量中通过该变量进行循环,结果正常输出1081.

  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. }

à修改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. }

à修改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. }

由以上五个例子,是不是可以得出以下的推断:在第一次调用document.write()之后,原来的dom元素的变量已经被释放。不知道各路高手怎么看待这个问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值