使用js / jQuery解析<script>标记

时间:2017-07-24 13:50:29

标签: javascript jquery html

我有一个HTML页面,用户可以在其中编辑HTML资源(使用ACE编辑器)。在这个HTML源代码中,有一个&lt; script&gt; -tag,它可以做一些非常基本的东西。

&#xA;&#xA;

有没有优雅的解决方案解析脚本标记以便(例如)评估脚本标记中使用的变量?对于“普通”标签,我使用parseHTML()将html作为jQuery对象。

&#xA;&#xA;

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

&#xA;&#xA;
 &lt; textarea id =“myScript”rows =“5”readonly&gt;&#xA; &LT;脚本&GT;&#XA; $ myVal =“f00”;&#xA; &lt; / script&gt;&#xA;&lt; / textarea&gt;&#xA;&lt; label id =“myLabel”&gt; Hello&lt; / label&gt;&#xA;&#xA;&#xA; $(function() {&#xA; $ scriptVar = $('#myScript')。text;&#xA; //解析$ scriptVar&#xA; //检索$ myVal的值,将其写入#myLabel&#xA; // $ myParsedValue = ???&#xA; // $('#myLabel').text('bar!');&#xA;});&#xA;  
& #xA;&#xA;

以下是小提琴: https://jsfiddle.net/stepdown / jqcut0sn /

&#xA;&#xA;

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

&#XA;

1 个答案:

答案 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); 
});