是否有规范规定元素的 id 应该设为全局变量?

2023-12-10

如果我有一个<div id='a'>在 Chrome 中然后在 javascript 中我可以做a.stuff()(就好像a是一个全局变量)。

然而,这不适用于 FireFox - 我需要使用document.getElementById('a').

是什么正确的行为这里? (根据W3规格)

另外我感兴趣的是如果我有一个带有 id 的 div,Chrome 将如何解决歧义a还有一个名为的全局变量a我的剧本里也有。行为会是随机且古怪的吗?

id 由连字符(“-”)、冒号(“:”)和句点(“.”)组成的元素将如何被翻译(好吧,我知道它们可以通过document.getElementById但浏览器如何将其转换为代表它们的全局变量)


这取决于您阅读的规范。 :)

HTML4 规范没有描述此行为(参见,http://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-id and http://www.w3.org/TR/1999/REC-html401-19991224/types.html#type-name)。然而,它是由 Internet Explorer 引入的,然后为了兼容而复制到其他主要浏览器中。 FireFox 也显示此行为,但仅在怪癖模式(即使如此,它的实现似乎也有问题)。

当前 WHATWG HTML 规范requires这种行为(abug请求将其删除的报告已关闭(WONTFIX)。

无论是否符合规范,都使用全局命名空间(即window)对于应用程序代码通常被认为是不良行为。考虑使用引用元素 IDdocument.getElementById()或 jQuery 便捷方法(例如,$("#a"))并使用函数范围的变量来避免将新变量引入全局命名空间。

关于此行为有更长的讨论WHATWG 邮件列表.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有规范规定元素的 id 应该设为全局变量? 的相关文章

随机推荐

  • 如何防止 gdb 在下一个命令后停止

    我正在尝试定义一个命令链 该命令链将在 gdb 中的断点之后调用 break some function commands up next printf some string continue end 在这种情况下 例如 我想在 some
  • 将复选框添加到 PHP POST 电子邮件表单

    我正在尝试为 WordPress 构建一个表单 我过去使用过插件 但我需要对某些特定样式进行最大程度的控制 我还不太擅长 PHP 所以正在努力尝试向脚本添加复选框 我已经删除了我的尝试并将复选框留在了 html 中 但不在 PHP 中 有人
  • SQL命令插入中文字母

    我有一个数据库 其中有一列 nvarchar 类型 如果我写 INSERT INTO table VALUES 玄真 表明 在表中 我应该怎么办 我正在使用 SQL 开发人员 使用单引号而不是双引号来创建文本文字并用于NVARCHAR2 N
  • 在 for 循环中写入 .csv

    我想在 for 循环中写入 csv 文件 假设我有一个数据框data为了简单起见 有 3 行变量x 最后 我希望输出为 200 个 csv 文件 每个文件包含一行数据 数据的第一列是我的变量的标识 ID 此外 我的数据描述如下 data I
  • JavaScript通过数组中的循环设置时间差

    我尝试使用 JavaScript 中的循环将值存储在数组中 它只对我部分有效 我想将时间存储在数组中 会有startTime endTime和一个间隔 例如 如果想获取9 00到10 00之间的时间 间隔为15分钟 应该打印 09 00 0
  • Java:为什么大正数相乘会导致负结果? [复制]

    这个问题在这里已经有答案了 我看到一些用 Java 进行整数相乘的奇怪行为 我正在做一些编码练习 并发现了以下嘶嘶声类型的练习 要求 给定一个整数 编写一个函数 找出小于给定整数的每个 3 的倍数的乘积 except5 的任意倍数 例如 给
  • async/await whenall 立即返回

    我有这个 简单 测试代码 不要打扰类方法的奇怪使用 我正在努力抓住Task lt gt 错综复杂 我想我有点了解Task lt gt Start Task lt gt Result模式 也许因为它更像 旧 Thread Start 但是一旦
  • 在 python 中动态生成变量名称[重复]

    这个问题在这里已经有答案了 有没有办法可以在 python 中循环生成变量名并为其赋值 例如 如果我有 prices 5 12 45 I want price1 5 price2 12 price3 45 我可以在循环或其他方式中执行此操作
  • 如何在没有窗口的情况下将图像直接传输到屏幕?

    如何显示 PNG BITMAP JPEG 文件等中的图像 在没有窗口的屏幕上 我希望图像出现时周围没有框架 最好不要将其作为窗口注册在任务栏上 我想将这些图像快速连续地显示在屏幕上 如果它与 Windows XP 和 Windows 7 兼
  • jQuery 属性名称包含

    我正在尝试定位包含某个单词的属性名称 而不是以您所想的方式 可以说我有 div div 我如何定位具有 data foo 在属性名称中 我认为您不能像定位属性值一样定位属性名称 但是 您可以使用 filter 有效地做到这一点 div fi
  • 选择一系列嵌套元素的每隔一个元素(每个元素只有一个子元素)[重复]

    这个问题在这里已经有答案了 是否存在每秒定位一次的 css 选择器 letter 当然 我可以把所有 letter位于同一级别并使用的元素 nth child 2n 但它们都取决于前一个字母的位置 所以我需要嵌套 firstname pos
  • 填充前一列中的空白单元格 pandas python

    如果我有一个简单的数据框 例如 q 1 q 1 mark q 2 q 2 mark TRUE a 1 c FALSE b 2 TRUE c 3 如何填写 q 2 mark 列的空白值 以便它们与 q 1 mark 匹配 所以步骤是 查看该列
  • UWP 的“Add-DevAppPackage”Powershell 脚本检查开发人员许可证。这是侧面加载的问题吗?

    我正在开发一个 LOB 业务线 UWP 项目 我们希望将该应用程序作为 appxbundle文件 旁边是 cer和一个 Powershell 脚本 这是当您通过选择从 Visual Studio 生成捆绑包时在包中生成的内容Project
  • VS Code 终端打开,然后崩溃并在按终止按钮后消失

    在 VS Code 中单击 终止终端 后出现此错误 无法解析您的 shell 环境 生成的 shell 出现意外的退出代码 代码为 null 信号 SIGSEGV 现在 当我单击 终端 新终端 时 我的 VSCode 会执行此操作 它打开窗
  • CUDA 流销毁和 CudaDeviceReset

    我已经使用 CUDA 流实现了以下类 class CudaStreams private int nStreams cudaStream t streams cudaStream t active stream public default
  • 获取范围相对于其父容器的开始和结束偏移量

    假设我有这个 HTML 元素 div Hello everyone a This is my home page a p Bye p div 用户用鼠标选择 home 我希望能够确定有多少个字符 parent他的选择开始 以及从末尾开始有多
  • 重命名 JSON 中的属性

    你好 这是我的 json name test options Repartition Active Satellite No 我想用 s 重命名 卫星 中的 卫星 但我没有成功 我试过 UPDATE Liaison set content
  • 如何在将 html 写入 PDF 时应用样式

    我正在将 html 添加到 pdf 文件中 我的 html 是 div 形式 并且包含 style 属性 其样式如下border 2px solid red 但这种风格不适用于我正在写入 pdf 文件的 html 我正在使用以下代码 Doc
  • Cocoa 脚本:从“重复”命令返回克隆对象

    AppleScriptduplicate命令应该返回复制的对象 虽然使用基于 AE 的原始函数的应用程序似乎可以做到这一点 但基于 Cocoa 脚本框架的应用程序似乎永远不会返回任何内容 但缺失值 看来命令处理程序NSCloneComman
  • 是否有规范规定元素的 id 应该设为全局变量?

    如果我有一个 div 在 Chrome 中然后在 javascript 中我可以做a stuff 就好像a是一个全局变量 然而 这不适用于 FireFox 我需要使用document getElementById a 是什么正确的行为这里