0

我的问题如下。我有多个脚本块,其中包含文本/纯文本的 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>

谢谢

4

3 回答 3

0

如果您更改脚本,则不能document.write将其输出代替元素,因为每次添加新的或评估现有的时,整个页面的 javascript 代码都不会重新运行。 如果要替换为脚本执行的结果,可以从该脚本返回一些字符串,而不是使用,然后插入此字符串代替元素:<script>type<script>
<script type="text/plain">document.write<script type="text/plain">

<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>
于 2013-08-22T07:11:20.887 回答
0

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

var el = $("script[type*=plain]")[0];
eval(el.innerText);

但我会尽量避免使用 eval

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

于 2013-08-22T06:42:47.973 回答
0

就地修改script元素不会导致它被执行。您需要创建一个具有适当内容的新脚本元素。另一种选择是eval()旧元素的内容:

$(document).ready(function(){
    $("script[type*=plain]").each(function() {
        eval($(this).text());
    });
});
于 2013-08-22T06:42:19.617 回答