代码之家  ›  专栏  ›  技术社区  ›  danjah

如何将文本解析为javascript?

  •  2
  • danjah  · 技术社区  · 14 年前

    This question of mine (目前还没有答案),促使我找到一个更好的解决方案,我正在尝试。

    我的要求:

    •可以随意添加到文档中的代码块,而无需 id :

    <div class="thing">
      <elements... />
    </div>
    

    •通过外部脚本扫描和查找对象:

    var things = yd.getElementsBy(function(el){
        return yd.hasClass('thing');
    },null,document );
    

    •对象必须可单独配置,我目前拥有的是基于标识符的:

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

    •所以我需要放弃标识符( id="thing0" )因此,当同一代码的多个块添加到一个页面时,没有重复项

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


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

    讨论。

    好吧,如果你愿意的话,不要讨论,但是如果你明白了我的意思,那么请随意纠正我的任性思维,或者提供一个更好的解决方案——拜托!

    D

    2 回复  |  直到 14 年前
        1
  •  2
  •   Dwayne Charrington    14 年前

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

    因此,可以使用eval()标记来解析DIV或任何元素中的文本。对不起,我帮不了你。

        2
  •  0
  •   gnarf    14 年前

    为什么不呢?

    <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>
    

    你当然可以移除 <script> 如果您通过javascript添加此元素,则完全标记,只需对创建的元素执行代码即可。