ID 分配的 DOM 元素和全局属性
在上一个问题中,我们发现具有 ID 的特定 DOM 元素可以作为变量访问Internet Explorer 和 Chrome 中窗口对象的名称或属性。例如,对于 HTML 元素:
<div>
innerHTML 属性可以按如下方式检索:
alert(example.innerHTML); // Alerts "some text". alert(window["example"].innerHTML); // Alerts "some text".
这提出了问题:
属性和全局可访问性
预期的行为是让命名元素成为文档对象的明显属性。然而,这种方法是有问题的,因为它允许元素名称与实际文档属性发生冲突。
Microsoft Internet Explorer 通过将命名元素指定为窗口对象的属性,加剧了该问题。由于需要避免与文档或窗口对象的任何成员匹配的元素名称,这使事情变得更加复杂。
全局可访问性问题
此外,命名元素变得可见:类似全局的变量。虽然全局变量和函数声明通常会掩盖它们,但为具有匹配名称的全局变量赋值可能会导致 Internet Explorer 中出现错误。
最佳实践
它通常不鼓励依赖命名元素作为全局属性或在创建全局变量时省略 var 声明。建议遵循 document.getElementById,因为它具有更广泛的支持并减少了歧义。如果输入成为问题,请考虑使用名称较短的简单包装函数。
缓存和浏览器优化
维护 id 到元素查找缓存通常是不必要的因为浏览器经常使用快速查找来优化 getElementById 调用。当元素更改 ID 或从文档中添加/删除时,就会出现潜在问题。
标准化和未来影响
HTML5 规范现在将以前的非标准实践编入法典将命名元素添加到文档和窗口属性。这意味着 Firefox 4 也将支持此功能。
结论
虽然在某些浏览器中可以使用 ID 作为全局属性来访问 DOM 元素,但这种做法是由于潜在的冲突和歧义而灰心丧气。最好依赖 document.getElementById 或简单的包装函数。
以上是我可以通过 ID 作为全局属性访问 DOM 元素吗?我应该这样做吗?的详细内容。更多信息请关注PHP中文网其他相关文章!