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

javascript窗口对象元素属性

  •  3
  • Timothy  · 技术社区  · 16 年前

    一个同事给我看了下面的代码,并问我为什么它起作用。

    <span id="myspan">Do you like my hat?</span>
    <script type="text/javascript">
    var spanElement = document.getElementById("myspan");
    alert("Here I am! " + spanElement.innerHTML + "\n" + myspan.innerHTML);
    </script>
    

    我解释说,当浏览器解析文档时,一个属性以元素ID的名称附加到window对象上,该文档随后包含对相应dom节点的引用。有点像 window.myspan = document.getElementById("myspan") 在呈现页面时在后台调用。

    接下来的讨论中,我们提出了几个问题:

    • window对象和大多数dom都不是官方javascript/ecma标准的一部分,但是上述行为是否记录在任何其他官方文献中,或者与浏览器相关?

    • 上面的方法在浏览器(至少是主要竞争者)中有效,因为有一个窗口对象,但是在Rhino之类的东西中失败了。编写依赖于此的代码是否被视为不好的实践,因为它对执行环境做了太多的假设?

    • 是否有任何浏览器在上述情况下会失败,或者这被认为是全面的标准行为?

    这里有没有人知道这些问题的答案,愿意启发我?我尝试了一个快速的网络搜索,但我承认我甚至不知道如何正确地表达这个问题。欢迎提供参考和文档的指针。

    2 回复  |  直到 16 年前
        1
  •  3
  •   SLaks    16 年前

    这是一种非标准的IE专用行为,不应使用。

    [1] [2] [3]

        2
  •  1
  •   jimbo    16 年前

    这不是一个标准功能,只有IE和Opera支持。浏览器是否处于 quirks mode ,以及元素是否具有 name 属性。

    第二点, rhino 不包含DOM实现本身,因此问题不适用。也就是说,没有内置HTML解释器,因此不会有其他变量。

    env.js 是Rhino的DOM实现,提供HTML解释器。由于IDS window 范围变量不是Web标准,而env项目的目标是符合标准,您也不会看到其中描述的行为。

    希望这有帮助!