元素作为窗口上的属性存在

这个问题在这里已经有了答案:

  • 使用ID做DOM树元素成为全局变量? 4个答案

  • 我不确定历史观点,但HTML 5规定,如果元素具有id属性,则这些元素可作为window对象上的属性直接公开:

    Window接口支持命名属性。 受支持的属性名称随时包含以下内容(按树形顺序),忽略以后的重复项:

    [...]

  • 活动文档中任何HTML元素的id内容属性的值与非空id内容属性。
  • 这个定义的问题是它只保证如果有一个<div id="foo">Foo<div>那么window.foo将被定义。 它不能保证它的价值究竟是什么(阅读规范中有关如何确定的规则;例如,它可能会返回一个集合)。

    所以原来的答案是“为什么要使用getElementById ?” 很简单:因为您可以依靠它来返回您期望的内容,而无需考虑整个文档。


    通常在窗口对象内部放置一些东西将使其成为全局的。 例如:

    var A = function() {
        window.test = "bla";
        console.log(test);
    }
    var B = function() {
        console.log(test);
    }
    
    A();
    B();
    

    但这不是一个好的做法。 您不应该依赖任何全局对象,因为您可能希望将代码移动到没有窗口的浏览器。 或者以nodejs为例。

    我发现window.foo有点不对,因为你可能有创建一个叫做foo的全局变量的代码。 因此,使用getElementById可以确保您始终获取DOM元素。


    Window.foo在你的场景中工作正常,但是如果Id是这样的“foo-test”而不是“foo”,你会发现它不起作用。 这是因为JavaScript变量不允许破折号在它....而它会正常工作的情况下document.getElementById

    链接地址: http://www.djcxy.com/p/74113.html

    上一篇: elements exist as properties on the window

    下一篇: CSS button/link not registering on some clicks