将包含脚本的动态字符串插入HTML并动态执行

时间:2015-08-12 14:01:51

标签: javascript jquery html

我有一个形式的变量:

var x =  '<script type="text/javascript" language="javascript"> ..lots of stuff...</script>
<script type="text/javascript" language="javascript"> ..even more of stuff...</script>'

我希望将jquery插入到我的HTML代码中并执行它。

我尝试使用appendhtmleval但没有任何运气。

有什么想法吗?

示例脚本:

<script type="text/javascript" language="javascript">
var clk = 'http://......';
</script>
<script type="text/javascript" language="javascript" src="http://...."></script>
<noscript>
<a href="http://...." target="_blank"><img src="http://..." width="120" height="600" border="0" alt=""></a>
</noscript>

这将最终显示一个img,它将异步加载。

3 个答案:

答案 0 :(得分:0)

您可以使用Jquery getScript

//Moment example
if (typeof moment == "undefined") {
    var url = "~/assets/js/moment.js";
    $.getScript(url);
}

或Jquery Function

$(function(){   
    var test = "this.Foo = function() {alert('hi');}";
    var F=new Function (test);
    (new F()).Foo(); //Shows "Hi" alert
});

$(function(){	
    var test = "this.Foo = function() {alert('hi');}";
    var F=new Function (test);
    (new F()).Foo(); //Shows "Hi" alert
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

答案 1 :(得分:0)

通常将</script>标记嵌套在其他<script></script>标记中会破坏事物。你需要像下面的Javascript一样拆分它们,以免引起浏览器问题。

这是一个工作小提琴: this

的Javascript

var jsCode = '<scr' + 'ipt>var executeTest = function(){ alert("This is a test."); }</scr' + 'ipt>';
$('head').append(jsCode);

HTML

<script>executeTest();</script>

答案 2 :(得分:0)

此解决方案可能适用于您的特定情况:

var rx = new RegExp("<script .*?>(.*?)<\/script>", 'g');
var x = '<script type="text/javascript" language="javascript">alert("..lots of stuff...");</script><script type="text/javascript" language="javascript">alert("..even more of stuff...");</script>';
var res = rx.exec(x);

while (res) {
  var s = document.createElement("script");
  s.appendChild(document.createTextNode(res[1]));
  document.body.appendChild(s);
  res = rx.exec(x);
}

JSBin:http://jsbin.com/menocumiya/edit?html,js,console,output