我有一个HTML页面,用户可以在其中编辑HTML资源(使用ACE编辑器)。在这个HTML源代码中,有一个< script>
-tag,它可以做一些非常基本的东西。
有没有优雅的解决方案解析脚本标记以便(例如)评估脚本标记中使用的变量?对于“普通”标签,我使用parseHTML()将html作为jQuery对象。


从这个示例,我想要检索$ myVal的值(“ f00 ”)并将其写入 #myLabel :


 < textarea id =“myScript”rows =“5”readonly>
 <脚本>
 $ myVal =“f00”;
 < / script>
< / textarea>
< label id =“myLabel”> Hello< / label>


 $(function() {
 $ scriptVar = $('#myScript')。text;
 //解析$ scriptVar
 //检索$ myVal的值,将其写入#myLabel
 // $ myParsedValue = ???
 // $('#myLabel').text('bar!');
});

& #xA;
 以下是小提琴: https://jsfiddle.net/stepdown / jqcut0sn /


这有可能吗?我并不真正关心vanilla js,jQuery,regex或者甚至是为此目的的外部库。

答案 0 :(得分:0)
感谢@JeremyThille,他指出了正确的方向。我发现,我希望通过jQuerys $.globalEval()
实现目标 - 请参阅official documentation。
基本上是globalEval()的作用:它运行在<textarea>
中编写的脚本,并使变量/函数可以全局访问。
重要:这意味着,用户的语法错误(等)将破坏评估,并且顺序功能可能存在缺陷。此外,新变量是GLOBAL,因此基本上用户可以在主机页面上重写脚本。 (在我看来,这两个问题都不太重要,因为这是受过训练的用户的内部应用程序 - 他们也通过令人惊奇的ACE编辑器进行语法突出显示。但我想确保指出它。此外,有几篇关于使用eval()时的风险/时刻......)
我更新了小提琴以达到我想要的效果:https://jsfiddle.net/stepdown/Lxz7q6uv/
HTML:
<textarea id="myScript" rows="5" readonly>
$myVal = "f00";
</textarea>
<hr />
<label id="myLabel">Hello</label>
脚本:
$(function(){
var myScriptContent = $('#myScript').text();
$.globalEval(myScriptContent);
console.log($myVal);
$('#myLabel').text($myVal);
});