其中getElementsByName(name)方法是獲取頁面中所有具有name屬性的元素,但這個方法在IE與標准浏覽器中所取到的內容不一樣。在IE中getElementsByName(name)方法所取到的元素是其本身就自帶有name屬性也就是form表單中所列出的所有元素(這些元素本身就自帶有name屬性);標准浏覽器中getElementsByName(name)方法所取到的元素是具有name屬性的元素(本身就帶有此屬性+人為添加的此屬性)。所以如果在IE浏覽器中用此方法來獲取頁面中所有帶有name的元素時,只能取出其自身本來就具有此屬性的那些元素(表單類元素)而那些人為添加的name屬性元素則不會被取出來;標准浏覽器則不會這樣,它會將頁面中所有帶name屬性的元素全部取出。
getElementsByName()與getElementsByTagName()方法的共同之類是它們會把所取得的頁面元素組成一個元素集合並非是數組(雖然用firebug中的console.log()打印出來時是數組的形式)。如果用Object.porototype.toString.apply(arr)方法來查看取得的數據結果時,其返回的是“[object HTMLCollection]”而不是“[object Array]”。這樣一來用這兩種方法所取得的元素集合就不能像使用數組一樣來調用數組的一些方法進行操作了而需要將此集合進行轉換,將元素集合轉換為數組的形式就可以像操作數組一樣對裡面的元素進行處理了。
這個元素集合具有如下的屬性和方法:
1、元素索引(index)
2、元素集合的長度(length)
3、item()方法:通過傳入不同的索引值可以取得集合中相應的元素。IE下沒有此方法。
4、FF中還有一個namedItem(name)方法,取得具有name屬性的第一個元素。只有FF下有這個方法。
關於元素集合向數組形式的轉換方法有很多種,大家可以在網上搜索一下就有很多。也可以到司圖正美的這篇《js將類數組對象轉換成數組對象》博文中學習一。
以下是一個數組轉換的方法:
復制代碼 代碼如下:
function makeArray(arr){
if(arr.item){
var len = arr.length;
var array = [];
while(len--){
array[len] = arr[len];
}
return array;
}
return Array.prototype.slice.call(arr);
}
這是一個小例子,可以看一下轉換後的結果:
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]