JavaScript 库:jQuery 与 Prototype

Posted

技术标签:

【中文标题】JavaScript 库:jQuery 与 Prototype【英文标题】:JavaScript library: jQuery vs. Prototype 【发布时间】:2014-02-07 06:38:59 【问题描述】:

几天前我刚刚开始了我的第一个 javascript 教程。我已经到了他们解释库的使用的地步。到目前为止,有两个问题:

    getElementById 在 jQuery 中实现为 $("#id"),在 Prototype 中实现为 $("id")。为什么不一致?

    如果两个库都包含,浏览器如何决定应该为$("")返回哪个对象?

【问题讨论】:

你很可能不会同时使用 jQuery 和 Prototype,因为它们做了很多相同的事情。 @meagar 如果我需要在我的代码中同时使用这两者怎么办? api.jquery.com/jquery.noconflict 【参考方案1】:

浏览器不会“决定”,无论您包含第二个,都会覆盖第一个。

在两个库争夺$ 的情况下,请改用jQuery

jQuery('#id') // same as $('#id') when $ == jQuery

然后,您可以使用 jQuery.noConflict 将对 $ 的控制权返回给 Prototype。

至于不一致,它们是不同人在不同时间编写的不同库,无意使它们兼容。一致性从来不是考虑因素。

【讨论】:

【参考方案2】:

1。为什么不一致?

这两个库是在不同的时间、由不同的团队实施的,并且做的事情也大相径庭。您为什么期望一致性?

2。如果两个库都包含,浏览器如何决定应该为$("")返回哪个对象?

这取决于你如何包含它们。但是,jQuery 具有避免此类冲突的功能,请参阅jQuery.noConflict。我已经有一段时间没有使用原型了,但它可能也有类似的功能。

【讨论】:

Prototype 扩展了 JavaScript 本身中许多低级结构的原型(因此得名)。它非常符合 Ruby 的哲学,通过它的开放类,让语言做你需要的事情,而不是按原样使用它。结果,如果另一个库期望通常的行为,并且依赖于对它的错误解释(例如使用 for...each 迭代数组),那么您将得到不一致的结果。 jQuery 可以使用 noConflict() 处理 Prototype 对 $ 符号的使用。并非所有的 jQuery 插件都写得足够好来处理其余的问题。 原型:$('itemId') -> 单项或假。 $$('.className tag 无论选择器') -> 匹配项数组或空数组。 jQuery: $('#itemId') 或 $('whatever selector') -> 包含匹配项的对象。【参考方案3】:

此链接将帮助您了解在将 jquery 与原型等其他库一起使用时如何处理冲突 http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

【讨论】:

以上是关于JavaScript 库:jQuery 与 Prototype的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 与其他 JavaScript 库相比都有哪些优势?

简单入门JavaScript库jQuery:用选择符创建jQuery对象并应用方法

完美解决jQuery符号$与其他javascript 库框架冲突的问题

与jQuery公司有着类似的应用程序编程接口,让网状物开发更迅速,下载执行更快、量级更轻,针对现代高级浏览器的JavaScript语言库。

JavaScript函数库.jQuery

JavaScript 学习-35.jQuery 基础语法与事件