3

加载CDN 托管的 jQuery回退到本地文件是一种很好的做法。例如 HTML5 Boilerplate 是这样的:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script>

但是如何在 XHTML 中实现相同的功能呢?由于document.write()在正确的 XHTML 中不起作用(作为 发送application/xhtml+xml),是否有替代方法?

4

3 回答 3

3

此代码创建一个新<script/>元素并将其附加到页面上的第一个元素之前<script/>

if (!window.jQuery) {
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = 'js/vendor/jquery-1.8.0.min.js';

   var firstScript = document.getElementsByTagName('script')[0];
   firstScript.parentNode.insertBefore(script, firstScript);
}
于 2012-09-02T11:21:03.810 回答
0

createElement, setAttribute,appendChild像往常一样更换document.writeinnerHTML

于 2012-09-02T11:17:46.783 回答
0

扩展 Maxim Vi. 的回复,我使它更接近最初的想法,将其插入到它被调用的位置:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript" id="jQuery">
if (!window.jQuery) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = '/js/jquery-1.8.0.min.js';
    var jQueryScript = document.getElementById('jQuery');
    jQueryScript.parentNode.insertBefore(script, jQueryScript);
}
</script>

这样,您可以将脚本保留在页脚中(如果页面内有其他脚本,则不会过早插入或插入不同的位置)。

编辑:我在使用该解决方案的某些浏览器中遇到问题,但id="jQuery"进一步向下移动解决了它。我相应地调整了代码。

于 2012-09-02T11:42:23.217 回答