繁体   English   中英

将文本/纯文本块转换为文本/ javascript并执行

[英]convert blocks from text/plain to text/javascript and execute it

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

n

在适当位置修改script元素不会导致其执行。 您需要创建一个具有适当内容的新脚本元素。 另一个选择是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);

但我会尽量避免使用eval

如果有其他方法,我不知道,为此,我很抱歉。

如果更改脚本的type ,则无法使document.write将其输出替换为<script>元素,因为每次添加新的<script>或评估现有的javascript代码时,整个页面的javascript代码都不会重新运行。
如果要用脚本执行的结果替换<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM