我想用document.getElementsByTagName返回值
document.getElementsByTagName('input').concat(some_array)
但document.getElementsByTagName()
返回的object
代替array
如何獲得數組?
我想用document.getElementsByTagName返回值
document.getElementsByTagName('input').concat(some_array)
但document.getElementsByTagName()
返回的object
代替array
如何獲得數組?
不幸的是這樣做完全可靠的,你需要做手工,例如:
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
在肖恩的回答矇混過關,這可能無法在瀏覽器上,其中NodeList
由getElementsByTagName
返回的對象是「主機對象」。
ECMAScript中定義了呼籲Array.prototype
方法必須與一個length
和整數性能爲母語的JS對象的工作,併爲arguments
對象,但不保證主機對象。與幾乎所有涉及主機對象的東西一樣,瀏覽器可以隨心所欲地將你搞砸,不過它喜歡。
如果您不需要支持IE版本小於或等於7 *然後使用slice()
:
Array.prototype.slice.call(
document.getElementsByTagName('img')).concat(some_array)
*
感謝bobince!
那麼,肖恩的答案在FF,Opera和Chrome中完美的工作。 ...但在ie6中不起作用。任何人都可以告訴我有關ie7,ie8,ie9嗎? – Dan 2010-12-22 20:14:36