0
<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

4 回答 4

4

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

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

于 2012-05-12T12:59:43.577 回答
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>

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

于 2012-05-12T13:02:19.137 回答
1

看起来您在<script id='scriptD'>DOM 中存在之前解析和执行脚本。要么执行函数,$(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>
于 2012-05-12T13:01:35.153 回答
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>
于 2012-05-12T13:04:49.277 回答