当前位置: 首页 > 面试题库 >

为什么我们不只使用元素ID作为JavaScript中的标识符?

东郭俊楠
2023-03-14
问题内容

我使用的所有浏览器都允许id="myDiv"通过简单的编写来访问元素:

myDiv

无论如何,这种方法似乎没有足够的文档记录,实际上,我遇到的消息来源甚至都没有提及它,而是假设有人会使用

document.getElementById("myDiv")

或许

document.querySelector("#myDiv")

访问DOM元素,即使它的ID是事先知道的(即,在运行时也不计算)。我可以说出,如果有人无意间尝试myDiv在更广的范围内重新定义(虽然不是一个很棒的主意…),用一些不同的值覆盖它,然后继续进行而又没有注意到冲突,则后一种方法的优点是可以保持代码安全。。

除此之外呢?除了代码设计以外,在使用上述简短形式时是否还有其他顾虑,或者我在这里还缺少什么?


问题答案:

无论如何,这种方法似乎没有足够的文档记录,实际上,我遇到的消息来源甚至都没有提及它。[…]

除了依赖隐式声明的全局变量外,缺少文档是不使用它的重要原因。

显然,将 id值提升为全局变量并不符合标准ID属性的HTML5规范未提及,因此,您不应假定将来的浏览器会实现它。

编辑:原来,这种行为 符合标准-在HTML5中,window应该支持“命名元素”访问属性:

为了上述算法的目的,具有名称name的已命名对象是: * 活动文档的名字是孩子浏览上下文 的名字 , * 具有名称内容属性(其值为 name)的 对象,小程序,区域,嵌入,表单,框架集,img或对象元素,或者 * 具有 id 内容属性,其值为 name的 HTML元素。

来源:HTML5规范,“对窗口对象的命名访问”, 重点是我的

基于此,遵循标准不是避免这种模式的原因。但是,该规范本身建议不要使用它:

通常,依靠它会导致代码变脆。例如,随着新功能添加到Web平台,最终映射到该API的ID会随时间变化。替代使用
document.getElementById()document.querySelector()



 类似资料:
  • 问题内容: 处理一个项目,差不多完成了,只是整理了HTML,我发现您实际上没有被允许使用的ID只是一个数字, 属性“ id”具有无效值“ 567”。属性ID为ID类型。如上所述,它应该以字母开头并且不能有空格 我可以遍历我的代码并添加一个字母,然后在jQuery中使用该值时将其删除,但这会很混乱,我不需要。 是否有理由不应该将数字用作ID? 问题答案: 这就是规范所说的。 根据HTML 4规范:

  • 我想知道为什么人们似乎不使用GraphQL jus与Redux。 我以前从未使用过GraphQL,但我想开始一个新项目,但阿波罗和继电器都不能说服我。目前,我正在创建一个使用react和redux以及“老式”RESTAPI的应用程序。我喜欢redux的想法,它将我的应用程序的全部信息存储在一个地方。 现在,据我所知,阿波罗和中继都做了类似的事情,但它们使用单独的存储,在这两者中,我们混合了逻辑和视

  • 如果我在锚元素中放置div元素,它会使我的超文本标记语言无效。 不在内联元素中放置块级元素的原因是什么?

  • 问题内容: 我是一个完整的初学者。 我已阅读了有关解决方案的Google文档。我在互联网上搜索了同样的内容。 但。一切似乎都是技术性的。 据我了解,.Flush有助于在功能出现时立即执行这些功能,而无需将它们捆绑在一起。 我对吗? 如果不是的话,外行人的含义是什么?并请举一个简单的例子。谢谢。 问题答案: 程序员在希望确保在继续之前将先前代码的输出和/或效果写入电子表格时会使用。如果您不这样做,则

  • 我试图找到这个按钮并点击它。但我得到了这个错误: 我注意到它正在寻找不同的字符串bc它在类名前面添加了这个点。这是问题吗? 非常感谢。

  • 问题内容: 据我所知,以下两个代码段将达到相同的目的。为什么有块呢? 代码A: 代码B: 问题答案: 如果您未处理的异常被抛出会怎样?(我希望你不会抓到…) 如果从try块内部返回会怎样? 如果catch块引发异常会怎样? 一个代码块确保 无论 您退出该代码块(以几种方式明确地中止整个过程),该代码块都将被执行。这对于确定性清除资源很重要。