IE7中document.write()的問題

下面是一個簡單的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" onclick="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元素的變量已經被釋放。不知道各路高手怎麼看待這個問題?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章