簡體   English   中英

為什么我需要使用Mootools Element方法擴展document.body $(document.body)?

[英]Why do I need to do $(document.body) to extend document.body with Mootools Element methods?

因此,在嘗試讓我的應用程序在最新的IE上工作之后,事實證明IE不喜歡以下代碼:

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

Firefox和Chrome的反應還不錯,但IE上的document.body沒有Mootools Element方法。

在查看文檔之后 ,一些示例將$() document.body包裝起來,以將其公開給Mootools方法。

只是想知道它在FireFox / Chrome中工作正常的原因,但不能在IE中自動運行?

這是因為IE暴露(或者,呃,不)元素原型的擴展方式。 在適當的瀏覽器中, document.body - 以及作為DOM的一部分並且從Element派生的所有其他內容 - 繼承附加到Element.prototype

在舊的IE中,這不會發生(它繼承自內置的原型,但它只讀 - 是的)。 查看有關原因的任何主題 - 例如。 真的沒有辦法在IE中公開html元素的原型(<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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM