Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文本解析为JavaScript?_Javascript_Configuration_Dynamic_Object - Fatal编程技术网

如何将文本解析为JavaScript?

如何将文本解析为JavaScript?,javascript,configuration,dynamic,object,Javascript,Configuration,Dynamic,Object,(目前尚未回答),促使我找到更好的解决方案 我的要求: •可以任意添加到文档中的代码块,无需id: <div class="thing"> <elements... /> </div> •对象必须是可单独配置的,我目前拥有的是基于标识符的: <div class="thing" id="thing0"> <elements... /> <script

(目前尚未回答),促使我找到更好的解决方案

我的要求: •可以任意添加到文档中的代码块,无需
id

<div class="thing">
  <elements... />
</div>
•对象必须是可单独配置的,我目前拥有的是基于标识符的:

<div class="thing" id="thing0">
    <elements... />
    <script type="text/javascript">
      new Thing().init({ id:'thing0'; });
    </script>
</div>

newthing().init({id:'thing0';});
•因此,我需要舍弃标识符(
id=“thing0”
),以便在一个页面中添加多个相同代码块时不会出现重复

•我仍然需要能够在没有标识符的情况下单独配置这些对象


所以!尽管如此,我想知道如何在每个添加的代码块的脚本块内,在其脚本标记内创建一个动态全局变量。当找到每一个“东西”时,我认为抓取脚本标记的innerHTML并以某种方式将该文本转换为可用的JS对象是合法的

讨论

好的,如果你愿意,不要讨论,但如果你明白了,那么请随意纠正我任性的想法或提供更好的解决方案-请


d

我有点理解您来自何方,我能给您的唯一建议就是查看eval()标记。函数的作用是:计算和/或执行一系列JavaScript代码。首先,eval()确定参数是否为有效字符串,然后eval()解析字符串以查找JavaScript代码。如果它找到任何JavaScript代码,它将被执行

因此,您可以使用eval()标记解析DIV或任何元素内部的文本。很抱歉,我无法进一步帮助您。

为什么不呢

<div class="thing virgin">
  <script>
    var newElems = yd.getElementsBy(function(el){
     return yd.hasClass(el,'thing') && yd.hasClass(el, 'virgin');
    },null,document );
    // find the 'virgin's and remove the 'virgin' class from them as you init?
  <script>
</div>

var newElems=yd.getElementsBy(函数(el){
返回yd.hasglass(el,'thing')&&yd.hasglass(el,'virgin');
},空,文件);
//找到“virgin”并在初始化时从中删除“virgin”类?

当然,如果您通过javascript添加此元素,您可以完全删除
标记,只需在您创建的元素上执行代码。

不确定这是否比我目前所做的更有益于我。目前,我确实在一个外部文件中执行所有操作,但该文件可能会加载数百页,因此它是一个普通文件。如果你明白我的意思的话,我肯定不会在第1页和第69页之间有相同的配置要求。到目前为止,我可以在信息“库”中定义配置对象,由实例化的Thing()对象通过其所在页面的URL标识,也可以在脚本块中进行配置,如上所述:/Ok,我想这是更接近的一步-我忘记了eval()。eval()被认为是坏习惯吗?我听过很多东西,通过方法调用将任何字符串作为javascript执行的想法听起来很粗略……老实说,eval()比安全风险(至少在javascript中)更需要资源,除非您传递用户信息。例如,在PHP等语言中,Eval()被认为比JS更危险。下面是在Javascript中使用eval()的一些注意事项:1。不正确使用eval会打开您的代码进行注入攻击2。调试可能更具挑战性(没有行号等)。Eval'd代码执行更慢(没有编译/缓存Eval'd代码的机会)4。每次调用eval()都会创建一个新的JavaScript解释器实例。这可能是一个资源猪。谢谢Dwayne,是的,我现在同意eval()-阅读了一些关于风险/好处的文章。在我的情况下,几乎没有风险,它为我解决的问题有很大的回报。同样在我的例子中,eval()可能只会在找到的每个适当元素上运行一次,并且一个页面上最多只能运行5个元素,因此需要5个eval。如果我错误地认为这不是一个性能上的成功。。。。请纠正我:p性能的下降甚至可能不会很明显,除非您使用Firebug或其他东西对Javascript进行评测,否则可能会额外增加几毫秒。如果您没有为pereval()执行大量Javascript,那么使用5个eval是安全的。
<div class="thing virgin">
  <script>
    var newElems = yd.getElementsBy(function(el){
     return yd.hasClass(el,'thing') && yd.hasClass(el, 'virgin');
    },null,document );
    // find the 'virgin's and remove the 'virgin' class from them as you init?
  <script>
</div>