假设我在index.html中使用了3个不同版本的jquery(1.3,1.5,2.3)。我正在使用一个使用jquery 1.3的CSS框架(当然,在那个css框架$
符号已被用作jQuery的别名。无论如何,我可以告诉CSS框架使用1.3 jquery,没有使用noconflict
模式修改该框架的js文件,并将该框架的js文件中每次出现的$
符号更改为$ j(假设我已创建此变量$j = noconflict()
)?
答案 0 :(得分:1)
如果CSS框架是半正确编写的,你可以这样做:
<script src="jquery-1.3.js"></script>
<script src="the-css-framework.js"</script>
<script>
var jq1_3 = jQuery.noConflict();
</script>
<script src="jquery-up-to-date.js"></script>
CSS框架将(如果它被正确编写)获取当时版本的jQuery
并在其代码中使用它。如果您需要在 代码中使用它,则可以使用jq1_3
,而不是$
。
以下是jQuery 1.11的示例,将SimpleModal插件加载到其中,然后加载jQuery 2.2.4。我们可以将SimpleModal与jQuery 1.11一起使用,但不能与jQuery 2.2.4一起使用:
// Works
jq1_11.modal("<div>Hi there jQuery 1.11</div>");
// Fails, the plugin isn't loaded on this version
try {
$.modal("<div>Hi there jQuery 2.2.4</div>");
} catch (e) {
console.log("Error: " + e.message);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/simplemodal/1.4.4/jquery.simplemodal.min.js"></script>
<script>
var jq1_11 = jQuery.noConflict();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
但这是解决方法。修复是不花时间处理加载jQuery原因的多个副本的问题,而是花时间标准化和更新各种库以使用单个,最新版本的jQuery。有时这在短期内是不可能的,你必须解决问题,但它应该是主要目标。