我正在使用我们网站目前正在使用的Javascript库(> 8000)。 网站正在调用一个引导程序js,它依次会引用其他一些库脚本。
由于我们的JavaScript库大量使用jQuery,它目前也包含在引导程序中。
这是使用document.writeln:
完成的document.writeln("<script src=\"js\/jquery-1.4.4.min.js\" type=\"text\/javascript\"><\/script>");
我知道document.writeln不符合xHtml并且有更好的解决方案,但这只是它目前适用于我们所有网站并摆脱document.writeln的方式一个选项。
现在的问题是,当网站已经定义了较低版本的jQuery时,我们会遇到冲突。所以,我们决定在我们的库中重新定义jQuery:
document.writeln("<script src=\"js\/jquery-1.4.4.min.js\" type=\"text\/javascript\"><\/script>");
document.writeln("<script type=\"text\/javascript\">");
document.writeln(" var $myJQuery = jQuery.noConflict();");
document.writeln("</script>");
不幸的是,它没有用。
有人有解决方案吗?
答案 0 :(得分:4)
jQuery.noConflict()
只释放$()
而不是jQuery()
,这可能是问题所在。您可以尝试手动执行此操作(但请参阅下面的更好方法),如下所示:
<script>
theOld$ = $;
theOldjQuery = jQuery;
</script>
<script src=jquery-new-version.js></script>
<script>
$ = theOld$;
newjQuery = jQuery;
jQuery = theOldjQuery;
</script>
更新:更好的方法(感谢T.J.Crowder提示):
<script src=jquery-new-version.js></script>
<script>
newjQuery = jQuery.noConflict(true);
</script>
请参阅jQuery.noConflict的文档。
答案 1 :(得分:2)
如上所述,由于这一行,它可能无法正常工作:
document.writeln("</script>");
您需要分解字符串中的</script>
标记,以防止浏览器看到它并认为脚本在那里结束。 E.g:
document.writeln("<\/script>");
您已使用引用代码中的早期代码完成此操作,但不是新代码。
另请参阅rsp's answer below,您可能需要true
noConflict
参数才能释放jQuery
符号,而不仅仅是$
符号。< / p>
答案 2 :(得分:0)
你可能会发现jquery包含在html5boilerplate.com中的方式很有用:
<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if necessary -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.5.1.min.js">\x3C/script>')</script>
因此您可以在页面上执行jQuery对象存在的检查以及jQuery版本
// Returns string Ex: "1.5.1"
$().jquery;