使用document.writeln()重新定义jQuery
我正在开发一个Javascript库,目前我们的网站正在使用它(> 8000)。 网站正在调用一个引导程序js,它将引用其他一些库脚本。
由于我们的JavaScript库大量使用jQuery,因此它目前也包含在引导程序中。
这是使用document.writeln完成的:
document.writeln("");
我知道document.writeln不符合xHtml,并且有更好的解决方案,但这只是它目前适用于我们所有网站并摆脱document.writeln不是一种选择的方式。
现在的问题是,当站点已经定义了较低版本的jQuery时,我们会遇到冲突。 所以,我们决定在我们的库中重新定义jQuery:
document.writeln(""); document.writeln(""); document.writeln(" var $myJQuery = jQuery.noConflict();"); document.writeln("");
不幸的是,它不起作用。
有人有解决方案吗?
jQuery.noConflict()
只释放$()
而不是jQuery()
,这可能是问题所在。 您可以尝试手动执行此操作(但请参阅下面的更好方法),如下所示:
更新:一个更好的方法来做同样的事情(感谢TJ Crowder的提示)将是:
请参阅jQuery.noConflict的文档。
如上所述,由于这条线,它可能无法正常工作:
document.writeln("");
您需要在字符串中分解该标记,以防止浏览器看到它并认为脚本在那里结束。 例如:
document.writeln("<\/script>");
您已使用引用代码中的早期代码完成此操作,但不是新代码。
另请参阅下面的 noConflict
答案 ,您可能需要noConflict
的true
参数才能释放jQuery
符号,而不仅仅是$
符号。
您可能会发现jtml包含在html5boilerplate.com中的方式很有用:
所以你可以在页面和jQuery版本上执行jQuery对象存在的检查
// Returns string Ex: "1.5.1" $().jquery;