引用脚本容器元素?

时间:2010-10-08 13:42:34

标签: javascript dom

我想知道是否有办法处理包含其中脚本的DOM元素。如果我有:

<script type="text/javascript> var x = ?; </script>

有没有办法可以为“x”分配包含“x”的脚本元素的引用?

2 个答案:

答案 0 :(得分:2)

没有一种真正安全的方式。

最接近的是使用getElementsByTagName获取所有脚本,获取其长度,获取最后一个脚本元素,然后从那里开始工作。

如果延迟脚本或脚本已在另一个脚本元素之前动态添加到页面,则此操作可能会失败。

答案 1 :(得分:0)

您可以在脚本元素中包含一些标记文本,然后(类似于David所说的),您可以循环遍历DOM中的所有script元素(使用getElementsByTagName或您的任何功能图书馆,如果你正在使用它,可能有)。那应该可靠地找到元素。这看起来像这样(live example):

<body>
  <script id='first' type='text/javascript'>
    (function() {
      var x = "MARKER:first";
    })();
  </script>
  <script id='second' type='text/javascript'>
    (function() {
      var x = "MARKER:second";
    })();
  </script>
  <script id='third' type='text/javascript'>
    (function() {
      var x = "MARKER:third";
    })();
  </script>
  <script id='last' type='text/javascript'>
    (function() {
      var scripts, index, script;

      scripts = document.getElementsByTagName("script");
      for (index = 0; index < scripts.length; ++index) {
        script = scripts[index];
        if (script.innerHTML.indexOf("MARKER:second") >= 0
           && script.id !== "last") {
          display("Found MARKER:second in script tag #" + script.id);
        }
      }

      function display(msg) {
        var p = document.createElement('p');
        p.innerHTML = msg;
        document.body.appendChild(p);
      }
    })();
  </script>
</body>

请注意,与上面的脚本一样,如果您要从不同的脚本标记中查找脚本标记标记,则需要对其进行处理。上面是通过检查脚本标记的ID来处理的,但你也可以在你不想找到的那个中分解它,如下所示(live example):

if (script.innerHTML.indexOf("MARKER:" + "second") >= 0) {
  display("Found MARKER:" + "second in script tag #" + script.id);
}