关于IE7中document.write()的问题

  下面是一个简单的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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值