【问题标题】:Append script in head by jquery通过jquery在头部附加脚本
【发布时间】:2012-12-11 17:52:20
【问题描述】:

如果正文中有标签<script>,我想在头部附加script,我尝试如下但它不起作用,怎么做?

演示: http://jsfiddle.net/rYXJx/

JS:

var TAREA = $('body').find('textarea').length;

if(TAREA > 0){ 
    $('head').append('<script type="text/javascript" src="files/js/nicEdit.js"></script><script type="text/javascript">bkLib.onDomLoaded(function() { nicEditors.allTextAreas() });</script>');
    };

【问题讨论】:

  • 我看不出你的演示是如何工作的。 nicEditors 是什么?
  • &lt;/script&gt; 标签内的文字 &lt;script&gt; 会破坏脚本标签!
  • 向 DOM 的 &lt;head&gt; 部分添加元素在页面呈现后将不起作用。因此,即使您附加了script 标记,也不会发生任何事情。您需要使用更动态的方法。

标签: javascript jquery dom


【解决方案1】:

你可以使用jquery getScript函数:

http://api.jquery.com/jQuery.getScript/

所以正确的代码如下所示:

 $.getScript('files/js/niceEdit.js');

【讨论】:

    【解决方案2】:

    脚本中的一个问题是字符串文字中的&lt;/script&gt; 实际上破坏了外部&lt;script&gt; 标记。您可能会注意到页面中的这些字符似乎是凭空出现的:

    ');};

    其次,虽然仍然可以在头部注入&lt;script&gt; 标签,但没有直接/简单/跨浏览器的方式知道脚本何时完成加载。而且你不能在脚本完全加载之前使用它。

    最佳解决方案是使用提供回调的jQuery.getScript()。使用回调调用nicEditors.allTextAreas()函数:

    $(document).ready(function () {
        if ($("textarea").length > 0) {
            $.getScript("files/js/nicEdit.js", function () {
                // no need for onDomLoaded -- DOM is loaded at this point!
                nicEditors.allTextAreas();
            });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多