2010-12-22 114 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!