[英]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.