Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将块从text/plain转换为text/javascript并执行它_Javascript_Plaintext - Fatal编程技术网

将块从text/plain转换为text/javascript并执行它

将块从text/plain转换为text/javascript并执行它,javascript,plaintext,Javascript,Plaintext,我的问题如下。 我有多个脚本块,其中包含text/plain类型的javascript代码。 所以我的问题是,有没有脚本可以动态地将它们从text/plain转换为text/javascript类型并执行其内容?我遇到的问题是执行的位置,因为脚本包含document.write,所以输出附加在html的末尾,而不是脚本本身的位置 让我们这样说吧 <script type="text/plain">alert('hello world');</script> <scr

我的问题如下。 我有多个脚本块,其中包含text/plain类型的javascript代码。 所以我的问题是,有没有脚本可以动态地将它们从text/plain转换为text/javascript类型并执行其内容?我遇到的问题是执行的位置,因为脚本包含document.write,所以输出附加在html的末尾,而不是脚本本身的位置

让我们这样说吧

<script type="text/plain">alert('hello world');</script>
<script type="text/javascript">
$(document).ready(function(){
    $("script[type*=plain]").each(function() {
        $(this).attr('type','text/javascript');
    });
});
</script>
alert('hello world');
$(文档).ready(函数(){
$(“脚本[type*=plain]”)。每个(函数(){
$(this.attr('type','text/javascript');
});
});

thnx

在适当的位置修改
脚本
元素不会导致执行它。您需要创建具有适当内容的新脚本元素。另一个选项是
eval()
旧元素的内容:

$(document).ready(function(){
    $("script[type*=plain]").each(function() {
        eval($(this).text());
    });
});

您可以使用一些讨厌的方法,选择type=plain的标记,然后访问其innerText属性,将其分配给eval方法

var el = $("script[type*=plain]")[0];
eval(el.innerText);
但我会尽力的


如果有不同的方法,我不知道,对此我很抱歉。

您不能制作
文档。如果更改脚本的
类型,请编写
以将其输出替换为
元素,因为每次添加新的
或评估现有代码时,整个页面的javascript代码不会重新运行。
如果要用脚本执行的结果替换
,可以从该脚本返回一些字符串,而不是使用
文档。编写
,然后插入此字符串以代替
元素:

<script type="text/plain">
  var result = "line1<br>";
  result += "line2"; 
  alert('hello world');
  result
</script>
<script type="text/javascript">
$(document).ready(function(){
  $("script[type*=plain]").each(function() {
    $(this).replaceWith(eval($(this).text()));
  });
});
</script>

var result=“line1
”; 结果+=“第2行”; 警报(“你好世界”); 结果 $(文档).ready(函数(){ $(“脚本[type*=plain]”)。每个(函数(){ $(this.replacetwith(eval($(this.text())); }); });
我确实用document.createElement和replaceChild尝试过,但问题是执行的地方。你能把你尝试过的添加到你的问题中,并用小提琴演示一下吗?我创建了一个JS函数,它在每个文本/纯脚本块后调用。这是我想出的最简单的解决办法。虽然不是最优雅的,但仍然是。