这是因为 IE 暴露(或者,呃,不)用于扩展的 Element 原型的方式。在适当的浏览器中,document.body
- 以及作为 DOM 的一部分并从 Element 派生的所有其他内容 - 继承附加到Element.prototype
在旧的 IE 中,这不会发生(它继承自内置的 proto 但它是只读的)。查看有关原因的任何主题 - 例如。真的没有办法在IE(<8)中暴露一个html元素的原型吗?
简而言之,它是 DOM。这不是 ECMA 规范。他们没有这样做。他们现在这样做(完全从 IE9 开始)
MooTools - 作为原型 - 通过扩展它手动访问的元素来解决这个问题。它通过 $ 或元素构造函数或 Slick(当它第一次遇到元素时)这样做。
在 IE 中,extend 不仅会设置元素存储/uid,还会将对 expando 属性的引用从 Element.prototype 复制到元素对象本身。
所以,如果你这样做了:
$(document.body);
document.body.addClass('bar').adopt(new Element('div'));
这会奏效。您只需要扩展一次,然后将所有方法复制到实际对象上。
将来,mootools 将不再是原型,而是包装(如 jquery),因此任何元素访问都将通过 $ 类型函数。
见https://github.com/mootools/mootools-core/blob/master/Source/Element/Element.js#L268-275