getScript或eval在特定位置?

时间:2010-11-20 09:03:45

标签: javascript jquery dom eval

我想知道是否可以使用eval(或jQuery的getScript的某些变体)将外部javascript定位在DOM结尾或者头部以外的位置。我试过了:

var head = document.getElementById("fig"); 

而不是

var head = document.getElementsById("head")[0];

var script = document.createElement("script");
script.text = $(".code").val();
head.appendChild(script);

但我无论如何都无法让它发挥作用。 (代码确实有效,但Firebug会在#fig和页面末尾显示正在</body>标记之前替换的代码。

基本上我正在使用的JavaScript工具包根据脚本标记的位置呈现内容,我正在尝试根据用户输入动态修改javascript(因此我无法真正引用 new 外部JS文件 - 我宁愿运行一个eval,这并不理想。)

我想最糟糕的情况是使用PHP或其他东西将用户输入保存到“新”文件中,并使用指向该新PHP文件的getScript,但它看起来非常黑客。

再次感谢你!

1 个答案:

答案 0 :(得分:3)

您引用的“JavaScript工具包”是否使用document.writedocument.writeln将输出插入到页面中?如果是这样,您可以覆盖该函数以将脚本输出附加到正确的位置:

document.write = function(s) {
    $('#fig').append(s);
};

document.writeln = function(s) {
    $('#fig').append(s + '\n');
};

然后使用$.getScript加载并执行脚本。

编辑:这是一种更强大的方法,具体取决于代码的添加方式:

var output = '';

document.write = function(s) {
    output += s;
};

document.writeln = function(s) {
    output += s + '\n';
};

$.getScript('URL of script here', function() {
    $('#fig').append(output);
});