使用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 答案 ,您可能需要noConflicttrue参数才能释放jQuery符号,而不仅仅是$符号。

您可能会发现jtml包含在html5boilerplate.com中的方式很有用:

    

所以你可以在页面和jQuery版本上执行jQuery对象存在的检查

 // Returns string Ex: "1.5.1" $().jquery;