构建一个没有$ dollar符号的自定义jQuery

我有一个可以在不同类型的网站上运行的javascript库,例如wordpress或magento。 js lib动态加载jQuery并调用noConflict以分配给script元素的onereadystatechange()中的另一个变量名称空间。 但是,如果该站点还在我的js lib之前加载Prototype js,则Prototype和jQuery之间可能会发生冲突。

在调用onereadystatechange回调之前,可能会解析页面并调用Prototype函数。 如果Prototype函数使用任何’$’,它会导致该函数失败,因为美元符号’$’仍然是jQuery,而不是Prototype(在调用jQuery.noConflict()之前)。

我可以构建一个自定义jQuery,根本不使用’$’,因此上面的原因不需要再次加载Prototype吗?

编辑1:

这是我的js库(mylib.js)将在网站上使用的过程,以及jQuery如何与该网站上的Prototype发生冲突。

来自其他人网站的onepage.html

    

mylib.js

 1. If jQuery is not defined, create a script element with jQuery src and insert to header. 2. In the script element, attach event onreadystatechange. element.attachEvent('onreadystatechange', function () { if (elem.readyState == 'loaded' || elem.readyState == 'complete') { callback(); } }); 3. in callback(), I called noConflict(). var callback = function() { return function() { if (window['jQuery'] && hasJQueryReqVersion()) { window.myJQ = jQuery.noConflict(true); } } }(); 

问题是在调用callback()之前,可能会调用Prototype并且它会意外地使用已被jQuery覆盖的’$’。

您可以控制加载库的顺序。 首先加载jQuery库(通过在中包含该脚本节点,并在允许加载其他脚本之前立即调用$.noConflict()

首先加载jQuery并立即调用$.noConflict()

你也可以设置jQuery来完全避免使用类似的东西

 var JQry = jQuery.noConflict();