2010-12-22 115 views

回答

6

不幸的是這樣做完全可靠的,你需要做手工,例如:

function toArray(arraylike) { 
    var array= new Array(arraylike.length); 
    for (var i= 0, n= arraylike.length; i<n; i++) 
     array[i]= arraylike[i]; 
    return array; 
} 

toArray(document.getElementsByTagName('img')).concat(...) 

雖然你經常可以使用Array.prototype.somearraymethod.call在肖恩的回答矇混過關,這可能無法在瀏覽器上,其中NodeListgetElementsByTagName返回的對象是「主機對象」。

ECMAScript中定義了呼籲Array.prototype方法必須與一個length和整數性能爲母語的JS對象的工作,併爲arguments對象,但不保證主機對象。與幾乎所有涉及主機對象的東西一樣,瀏覽器可以隨心所欲地將你搞砸,不過它喜歡。

+0

那麼,肖恩的答案在FF,Opera和Chrome中完美的工作。 ...但在ie6中不起作用。任何人都可以告訴我有關ie7,ie8,ie9嗎? – Dan 2010-12-22 20:14:36

3

如果您不需要支持IE版本小於或等於7 *然後使用slice()

Array.prototype.slice.call(
    document.getElementsByTagName('img')).concat(some_array) 

*感謝bobince!