3

因此,在尝试让我的应用程序在最新的 IE 上运行后,事实证明 IE 不喜欢以下代码:

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

Firefox 和 Chrome 响应正常,但document.body在 IE 上没有 Mootools Element 方法。

查看文档后,包含一些示例document.body$()将其公开给 Mootools 方法。

只是想知道它在 FireFox/Chrome 中运行良好但在 IE 中无法自动运行的原因?

4

1 回答 1

7

这是因为 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

于 2012-10-25T20:51:47.693 回答