下面是一個簡單的html頁面,用於輸出input元素的所有屬性:
1. 在firefox,opera,safari,chrome下面都會輸出三個設值的屬性:type、onclick、value
2. 在IE6下面會輸出108個屬性,即ie支持的element元素的所有屬性
3. 在IE7和IE8Beta1下運行的時候,在輸出第一個屬性language後就會出錯。
- <html>
- <head>
- <script type="text/javascript">
- function buttonClick(){
- var element = document.getElementsByTagName('input')[0];
- var attris = element.attributes;
- alert(attris.length);
- //var attributes = '';
- //var len = attris.length;
- for(i =0; i < attris.length; i++)
- {
- //attributes += attris.item(i).name;
- document.write(attris.item(i).name + ‘<br/>’ );
- }
- //document.write(attributes);
- }
- </script>
- </head>
- <body>
- <input type="button" onclick="buttonClick()" value="button"/>
- </body>
- </html>
à修改1:根據屬性的個數輸出1,結果在輸出的一個1之後便會出錯
- function buttonClick(){
- var element = document.getElementsByTagName('input')[0];
- var attris = element.attributes;
- alert(attris.length);
- for(i =0; i < attris.length; i++)
- {
- document.write(1);
- }
- }
à修改2:同樣是根據屬性的個數輸出1,但attris.length的值預先存儲在變量中通過該變量進行循環,結果正常輸出108個1.
- function buttonClick(){
- var element = document.getElementsByTagName('input')[0];
- var attris = element.attributes;
- alert(attris.length);
- var len = attris.length;
- for(i =0; i < len; i++)
- {
- document.write(1);
- }
- }
à修改3:輸出所有屬性,但attris.length的值預先存儲在變量中通過該變量進行循環,結果同樣在輸出第一個屬性language之後便出錯
- function buttonClick(){
- var element = document.getElementsByTagName('input')[0];
- var attris = element.attributes;
- alert(attris.length);
- var len = attris.length;
- var outStr = ‘’;
- for(i =0; i < len; i++)
- document.write(attris.item(i).name + ‘<br/>’ );
- }
à修改4:輸出所有屬性,但輸出之前先在變量中存儲所有屬性值,結果正確輸出所有屬性名
- function buttonClick(){
- var element = document.getElementsByTagName('input')[0];
- var attris = element.attributes;
- alert(attris.length);
- var len = attris.length;
- var outStr = ‘’;
- for(i =0; i < len; i++)
- outStr +=attris[i].item(i).name;
- document.write(outStr);
- }
由以上五個例子,是不是可以得出以下的推斷:在第一次調用document.write()之後,原來的dom元素的變量已經被釋放。不知道各路高手怎麼看待這個問題?