Jquery这是正确的方法吗?

时间:2012-05-12 12:57:31

标签: javascript jquery

<script type="text/javascript">
        if (SOMECONDITION) {
            $("#scriptD").attr("src", "../../Scripts/A.js");
        } else {
            $("#scriptD").attr("src", "../../Scripts/B.js");
        }

</script>

<script id="scriptD" src="" type="text/javascript"></script>

我正在尝试动态插入.js文件(基于条件)。但这不起作用。谁能告诉我这里的问题是什么?

4 个答案:

答案 0 :(得分:4)

我认为您正在寻找getScript(网址):

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

答案 1 :(得分:3)

您正在尝试的方法之一是使用$.getScript()

if (SOMECONDITION) {
    $.getScript("a.js");
} else {
    $.getScritp("b.js");
}

此外,如果您将脚本放在<script>元素

之后,那么您将会工作
<script id="scriptD" src="" type="text/javascript"></script>
<script type="text/javascript">

    if (SOMECONDITION) {
        $("#scriptD").attr("src", "../../Scripts/A.js");
    } else {
        $("#scriptD").attr("src", "../../Scripts/B.js");
    }

</script>

这是因为当在元素之前调用它时,脚本将无法在DOM上找到scriptD

答案 2 :(得分:1)

看起来你在DOM中存在<script id='scriptD'>之前解析并执行脚本。执行$(document).ready()上的函数或重新排列它,以便脚本标记在执行之前存在。

<script type="text/javascript">
      $(document).ready(function() {
        if (SOMECONDITION) {
            $("#scriptD").attr("src", "../../Scripts/A.js");
        } else {
            $("#scriptD").attr("src", "../../Scripts/B.js");
        }
      });

</script>
<script id="scriptD" src="" type="text/javascript"></script>

答案 3 :(得分:0)

您可能想尝试一下:

<script type="text/javascript" id="scriptD" src=""></script>

<script type="text/javascript">
    (function () {
        if (SOMECONDITION) {
            $("#scriptD").attr("src", "../../Scripts/A.js");
        } else {
            $("#scriptD").attr("src", "../../Scripts/B.js");
        }
    })();
</script>

要更改src的脚本必须在对其属性进行任何更改之前存在。 或者你可能想尝试这种方式 - 没有空的src脚本:

<script type="text/javascript">
    (function () {
        var script = document.createElement("script");
        script.setAttribute("type", "text/javascript");
        script.setAttribute("src", "../../Scripts/" + (SOMECONDITION ? "A" : "B") + ".js");

        document.getElementByTagName(head)[0].appendChild(script);
    })();
</script>