JavaScript:无需使用getElementById访问DOM元素

4
以下是一些示例代码。
<body>
    <div id="wrapper" class="access">
        <form id="test">
            <input id="password"></input>
            <input type="submit"></input>
        </form>  
    </div>
    <script>
        console.log(password);
        alert(wrapper.className);
    </script>
</body>

控制台日志返回带有id为password的DOM元素。警告信息为“alert”。
在正常代码中也可以运行,例如var x = wrapper.className; 这样做肯定是不对的?如果像这样工作,那document.getElementById$('#password')goog.dom.getElement还有什么意义呢?这些函数现在只是用于遗留吗?
顺便说一下,它可以在Firefox、Chrome和Safari上运行。

1
一些浏览器将带有ID的元素定义为全局变量。在我看来,应该使用getElementById - cookie monster
2
你可以感谢IE。他们开始了这个,其他人为了兼容性而跟随。这被认为是一种不好的做法。坚持使用document.getElementById或者你提供示例所对应的库中的等效方法。 - Cᴏʀʏ
2
可能是JavaScript未定义变量自动定义?的重复问题,还有:https://dev59.com/0GUo5IYBdhLWcg3wxB7T和https://dev59.com/-3A75IYBdhLWcg3wK1wp。 - David Thomas
@DavidThomas 这可能是一个重复的问题,但你需要知道答案才能找到它 :) - Nick
2个回答

4

向后兼容性是将ID映射到window属性的原因。

这也是避免全局变量的主要原因之一-事实上,如果您尝试使用与元素ID相同名称的全局变量,则某些浏览器将直接崩溃。


4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接