javascript - 使用 js/jQuery 解析 <script> 标签

标签 javascript jquery html

我有一个 HTML 页面,用户可以在其中编辑 HTML 资源(使用 ACE 编辑器)。在此 HTML 源代码中,有一个 <script> -tag,它做了一些非常基本的事情。

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

在此示例中,我想检索 $myVal 的值(即“f00”)并将其写入#myLabel>:

<textarea id="myScript" rows="5" readonly>
  <script>
    $myVal = "f00";
  </script>
</textarea>
<label id="myLabel">Hello</label>


$(function(){
  $scriptVar = $('#myScript').text;
  // parse the $scriptVar
  // retrieve the value of, $myVal, write it to #myLabel  
  //$myParsedValue = ???
  //$('#myLabel').text('bar!'); 
});

这是 fiddle :https://jsfiddle.net/stepdown/jqcut0sn/

这可能吗?我并不真正关心普通的 js、jQuery、正则表达式,甚至可能是用于此目的的外部库。

最佳答案

感谢@JeremyThille,他为我指明了正确的方向。我发现,我想要实现的目标可以通过 jQuery $.globalEval() 实现。 - 请参阅official documentation

基本上,globalEval() 的作用是:它运行 <textarea> 中编写的脚本。并使变量/函数全局可访问。

重要:这意味着用户的语法错误(等)将破坏评估,并且顺序功能可能存在缺陷。此外,新变量是全局变量,因此基本上用户可以在托管页面上重写脚本。 (就我而言,这两个问题都不那么重要,因为这是一个针对经过培训的用户的内部应用程序 - 他们还通过令人惊叹的 ACE 编辑器进行语法突出显示。但我想确保指出这一点。此外,还有几篇关于使用 eval() 时的风险/糟糕时刻...)

我更新了 fiddle 以实现我想要的: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); 
});

关于javascript - 使用 js/jQuery 解析 &lt;script&gt; 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45282413/

相关文章:

javascript - jQuery 单击外部元素可向上或向下移动包含选中复选框的无序列表项

javascript - JS中通过索引获取所选项目的数组

javascript - 使用 JQuery 收集表单数据并删除或隐藏表单字段

html - 让html链接打开文件夹的方法有哪些

javascript - jquery 对话框小部件未传递我的表单值

javascript - 如何使用正则表达式更改此值?

php - 这个 PHP 语法是什么意思?为什么这个变量是 NaN?

javascript - 如何使用类获取元素内的元素值

JavaScript/Jquery : How do I pause each background color for 5 seconds during background loop?

html - 为什么 100vh 不适用于 p 元素?