JavaScript的getElementById
可以使用,我知道。但getElementsByClassName
怎麼樣?瀏覽器如何支持它?getElementsByClassName - 2012年可以安全使用?
通過谷歌,我發現各種自制的解決方案,它像this
正如你可以看到,這個帖子現在四歲了,這就是爲什麼我問。或者我應該只使用jQuery來處理那些可用的東西?
JavaScript的getElementById
可以使用,我知道。但getElementsByClassName
怎麼樣?瀏覽器如何支持它?getElementsByClassName - 2012年可以安全使用?
通過谷歌,我發現各種自制的解決方案,它像this
正如你可以看到,這個帖子現在四歲了,這就是爲什麼我問。或者我應該只使用jQuery來處理那些可用的東西?
第一關,您必須確定您需要支持哪個版本的IE:IE6,IE7,IE8?如果不知道這一點,我們無法真正提供最佳的選擇。如果你所需要的只是IE9及以上(某些模式下也是IE8),那麼你可以使用document.querySelectorAll(".classname")
或document.getElementsByClassName("classname")
。
如果你需要其他版本的IE,你不能走這條路。有getElementsByClassName()
墊片,少於30行代碼可用於在舊版本的IE中提供支持,但在那一點上,我強烈建議你只是得到一個選擇器庫,它可以完成所有的跨瀏覽器支持你。這聽起來像你已經熟悉有這樣一個庫的jQuery。如果你不想/需要jQuery的其餘部分,你可以得到一個選擇器庫。 jQuery內部使用Sizzle,它本身都是可用的,而且非常好。還有其他人。
這是一個很好的資源,所以你可以自己查看瀏覽器兼容性:http://caniuse.com/getelementsbyclassname。
只需使用document.querySelectorAll(".classname")
IE 8支持它:http://www.caniuse.com/#search=queryselectorall
我寫了一個墊片:
if (typeof document.getElementsByClassName !== 'function') {
HTMLElement.prototype.getElementsByClassName = function (classname) {
return this.querySelectorAll('.' + classname);
};
}
(經過測試,在Chrome 21和Opera 12.50的工作[如果是需要它],但不能在Firefox 14,我不能告訴如果它在IE,因爲我沒有IE)
1 - 'document.querySelectorAll(「類名‘)'在比'document.getElementsByClassName(’類名」)' – 2012-07-15 23:57:44
IE 8不支持在QSA怪異模式更瀏覽器所支持,所以它可能是確定您知道該頁面處於標準模式,但不以其他方式。無論如何,它應該被功能測試。 – RobG 2012-07-16 00:01:21
爲什麼downvote? – jfriend00 2013-10-04 23:58:36
爲什麼還有一個downvote?這裏發生了什麼?這個答案是在16個月前寫的。 – jfriend00 2013-10-05 02:23:32