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语言库。