`
yiding_he
  • 浏览: 448157 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Prototype, IE 的痛

阅读更多
今天用了一下 Prototype 1.5,发现在 IE 下很多元素没有被扩展,脚本执行报错。仔细看发现了原因。

Prototype 用 Element.addMethods() 方法对页面所有元素进行扩展:
Element.addMethods = function(methods) {
  Object.extend(Element.Methods, methods || {});

  
function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || 
false;
    
var cache = Element.extend.cache;
    
for (var property in methods) {
      
var value = methods[property];
      
if (!onlyIfAbsent || !(property in destination))
        destination[property] = cache.findOrStore(value);
    }
  }

  
if (typeof HTMLElement != 'undefined') {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, 
true);
    copy(Form.Methods, HTMLFormElement.prototype);
    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(
function(klass) {
      copy(Form.Element.Methods, klass.prototype);
    });
    _nativeExtensions = 
true;
  }
}

利用扩展 HTMLElement.prototype,就可以一次性对页面中的所有元素(不管是现有的还是将来新增的)进行扩展。这样做在 FireFox 中有效,然而在 IE 中没有 HTMLElement 的概念,所以无法做到一次性扩展。

但是对页面已有元素进行扩展还是可以的,就是这样
if (document.all) {
    $A(document.all).each(
function(element) {
        Element.extend(element);
    });
}

这仅仅是对现有元素的扩展,以后每次向页面添加元素,都必须调用一次 Element.extend() 方法。更麻烦的是,如果元素是通过 innerHTML 属性加到页面上的话,将不得不把页面的所有元素重新扩展一次。

总之,HTMLElement.prototype 在 IE 中没有可替代方案,在 IE 下用 prototype 将会很不爽。
分享到:
评论

相关推荐

    Prototype1.6.0在IE8 9下的问题

    标题“Prototype1.6.0在IE8 9下的问题”揭示了这是一个关于JavaScript库Prototype在较旧版本的Internet Explorer(IE8和IE9)中遇到兼容性问题的主题。Prototype是一个广泛使用的JavaScript框架,它提供了许多实用的...

    prototype_PrototypeJS1.6_

    9. **兼容性**:考虑到浏览器差异,PrototypeJS通常会提供跨浏览器的解决方案,确保在多个版本的IE、Firefox、Safari、Chrome等浏览器上正常运行。 10. **版本改进**:1.6.1相较于1.6可能包含了一些bug修复、性能...

    prototype-1.5.0

    "Prototype"是一个JavaScript库,由Sam Stephenson在2005年创建,旨在增强JavaScript的基础功能,提供更丰富的对象操作和面向对象编程的支持。在"prototype-1.5.0"这个版本中,我们主要关注的是Prototype库的核心...

    Prototype

    1. **兼容性**:Prototype 对多种浏览器有良好的兼容性,包括老版本的IE,降低了跨浏览器开发的难度。 2. **性能优化**:Prototype 对DOM操作进行了优化,减少了对DOM树的频繁修改,提升了页面性能。 3. **可扩展...

    Prototype-1.6.0 中文版\英文版\Prototype.js

    Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用的功能,使开发Web应用程序变得更加简单。这个压缩包包含了Prototype的1.6.0版本,包括中文版和英文版的文档,以及源代码文件。 首先...

    IE兼容IE6,IE7,IE8,IE9,IE10js文件

    例如,它不支持`Array.prototype.forEach`、`Array.prototype.map`等数组方法,不支持`getElementsByClassName`,也不支持CSS2.1以上的选择器,这使得使用现代JavaScript和CSS库时需要特殊处理。 2. **IE7兼容性...

    prototype_1.7.3.js 最新版本

    《prototype_1.7.3.js:JavaScript框架的里程碑》 在JavaScript的世界里,Prototype库是一个不可或缺的重要组成部分,尤其在Web开发领域,它为开发者提供了强大的功能和便利性。Prototype_1.7.3.js是这个库的一个...

    Prototype1.5.1使用手册

    Prototype库致力于提高JavaScript在不同浏览器之间的兼容性,如对IE6/7的一些特有问题进行了处理。 总结,Prototype 1.5.1使用手册涵盖了该库的主要特性和用法,对于前端开发者来说,是一个不可或缺的学习和参考...

    prototype

    标题中的"prototype"一词在IT领域中通常指的是JavaScript编程语言中的原型(Prototype)概念。JavaScript是一种基于对象和原型的动态类型语言,它的对象继承机制是通过原型链(Prototype Chain)来实现的。在...

    prototype 1.3 源码解读

    它确保事件处理器的 `this` 上下文正确设置,并且能够处理跨浏览器的问题(如 IE 中 `event` 对象的访问)。 #### 8. Number.prototype.toColorPart 方法 ```javascript Number.prototype.toColorPart = function ...

    Prototype_1.4.doc,Prototype_1.5.1.chm 中文版

    标题提及了两个版本的Prototype文档,分别是"Prototype_1.4.doc"和"Prototype_1.5.1.chm"。Prototype是JavaScript库的一个早期且广泛使用的版本,它提供了许多实用的功能,如对象扩展、事件处理、Ajax操作等,极大地...

    prototype帮助中文文档

    Prototype 是一个广泛使用的JavaScript库,它为浏览器端的开发提供了许多强大的功能,特别是对于处理DOM操作、Ajax交互以及对象扩展等方面。这个“prototype帮助中文文档”涵盖了Prototype库的核心概念、方法和最佳...

    非常有用的prototype实例

    在JavaScript中,`prototype`是一个核心概念,它与对象继承紧密相关。`prototype`机制是JavaScript实现面向对象编程的关键部分,允许我们为对象添加或扩展属性和方法。在这个"非常有用的prototype实例"中,我们可以...

    prototype1.6.0prototype1.6.0prototype1.6.0prototype1.6.0

    标题中的"prototype1.6.0"多次提及,暗示了我们正在讨论JavaScript库Prototype的1.6.0版本。Prototype是Web开发中一个强大的JavaScript框架,它为浏览器环境提供了许多实用的功能,增强了JavaScript语言的面向对象...

    javascript类库prototype.js

    10. **兼容性**:Prototype.js 兼容多种浏览器,包括IE6+、Firefox、Chrome、Safari和Opera等,使得开发者无需担心跨浏览器问题。 总的来说,Prototype.js 是一个强大且全面的JavaScript库,它极大地提升了开发富...

    prototype-1.6.0.3.js+prototype1.4 、1.5中文手册+prototype1.6英文手册

    Prototype是JavaScript库,它为浏览器环境提供了强大的对象扩展和功能,尤其在处理DOM(文档对象模型)和Ajax交互时。这个压缩包包含了Prototype库的多个版本的手册和源代码文件,便于开发者理解和使用。 首先,...

    Prototype 1.6 中文版CHM

    - **更好的浏览器兼容性**:1.6版本进一步提升了在不同浏览器上的兼容性,确保在IE、Firefox、Safari、Chrome等主流浏览器上都能良好运行。 ### 4. **使用Prototype 1.6中文版CHM** `Prototype_1.6.chm`文件是一个...

    prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版

    Prototype JavaScript 框架是Web开发中的一个关键工具,它为JavaScript编程提供了许多实用的类库函数和设计模式。这个“Prototype 1.6中文手册 chm+prototype 1.6.js源码 最新版”正是面向希望深入学习和掌握...

    prototype1.7.2

    1.7.2 版本的 Prototype 针对多种浏览器进行了优化,确保在 IE6+、Firefox、Chrome、Safari 和 Opera 等主流浏览器上的良好运行。 总结,Prototype 1.7.2 是一个强大且成熟的 JavaScript 库,它通过提供丰富的 API...

Global site tag (gtag.js) - Google Analytics