2012-10-25 44 views
3

所以試圖讓我的應用程序在最新的IE瀏覽器的工作後,原來IE不喜歡下面的代碼:

document.body.getElement('.className'); 

Firefox和Chrome迴應還好,但document.body在IE上有沒有MooTools的元素方法。

查看the documentation之後,一些示例將document.body包含在$()中以將其展示給Mootools方法。

只是想知道爲什麼它可以在FireFox/Chrome中正常工作,但不會自動在IE中使用?

回答

7

這是因爲IE公開的方式(或者,呃,不)用於擴展的Element原型。在適當的瀏覽器,document.body - 和其他一切是DOM的一部分,並從元素派生 - 繼承連接到Element.prototype

在舊版IE的方法,這種情況不會發生(它繼承了內置原型,但它是隻讀的 - ish)。看到任何主題爲什麼 - 例如。 Is there really no way to expose the prototype of a html element in IE (<8)?

總之,它是DOM。這不是ECMA規範。他們沒有這樣做。他們現在這樣做(完全自IE9以來)

MooTools - 是原型 - 通過擴展它手動訪問的元素來解決這個問題。它通過$或元素構造函數或Slick(當它第一次遇到一個元素時)這樣做。

在IE中,擴展不僅會設置元素存儲/ uid,還會將Element.prototype中的expando屬性的引用複製到元素對象本身。

所以,如果你這樣做:

$(document.body); 
document.body.addClass('bar').adopt(new Element('div')); 

這會工作。您只需要將其擴展一次,然後將所有方法複製到實際對象上。

未來,mootools將不會是原型但包裝(如jquery),所以任何元素訪問將通過$ type函數。

參見https://github.com/mootools/mootools-core/blob/master/Source/Element/Element.js#L268-275

+0

嗯,我明白了。我想盡可能多,但只是想確認。我不知道我只需要擴展document.body一次。有趣...感謝您的總結! –

相關問題