我正在使用原型v.1.6.0.3中的JavaScript库 我发现基本符号$在Mozilla中工作正常,但在IE6中没有。
这是一个简单的例子
Element.hide('div123');
- >在IE& Mozilla $('div123').hide();
- >仅在Mozilla工作我想知道我在这里缺少什么,因为我还有其他一些不能在IE中工作的情况,如drag& drop(它永远不会在IE中掉线,但在Mozilla中很好)。 虽然从我的理解Prototype是“支持”IE?
答案 0 :(得分:1)
我认为错误不在发布的代码中;这两个版本都适用于我,这些调用都不会在不同的浏览器上做任何不同的事情。
然而,Prototype在IE和Mozilla中的工作方式却截然不同,这可能会导致代码中的其他地方出现差异。
在Mozilla中,Prototypre将其方法添加到HTMLElement等的原型中,以便所有DOM对象都可以直接调用这些方法。但是在IE(*)中这是不可能的,所以要覆盖所有浏览器,你必须“扩充”你想要调用方法的每个节点,或者通过调用它上面的Element.extend
显式地,或者通过使用一个Prototype来隐式地自己的方法,例如$
函数,来获取对象的句柄:
document.getElementByID('foo').hide(); // ok on Mozilla, fail on IE
$('foo').hide(); // ok everywhere
Element.hide('foo'); // ok everywhere
Element.extend(document.getElementByID('foo'));
document.getElementByID('foo').hide(); // ok everywhere
这实际上是Prototype最糟糕的功能之一,因为你可以在Mozilla中编写一大堆代码,这些代码会在IE中失败并且不会注意到:它并没有隐藏浏览器差异而是放大它们。
更糟糕的是,因为许多Prototype自己的方法隐式地扩展了对象,并且因为一旦扩展了这些节点保留了它们的扩展,很容易得到在IE中忘记扩展元素的代码通常< / em>工作,因为其他东西已经扩展了它,但在一些罕见的情况下会爆炸。这不适合调试。
(*:不是IE的错。在ECMAScript标准中,没有期望你能像DOM一样改变'主机对象'的原型,即使你可以掌握它们的构造函数,也没有指定存在于任何特定的地方。原型正在利用非标准功能使代码看起来更好看,但遗憾的是你无法在实践中利用它。)