在JavaScript中如何处理带有破折号的ID'(自动创建全局变量)
How ID's with dashes are treated in JavaScript? (automatically global variable creation)
当您创建HTML元素并为其添加ID时,如:
<div id="test"></div>
它将自动在Javascript中作为变量test
可用,而不需要使用document.getElementById("test")
。
我想知道的是当你用破折号创建ID时会发生什么,比如:
<div id="test-one"></div>
这个元素将仍然可用在Javascript中通过一些变量或变量不会被创建?我试着检查test-one
和testOne
的值,但它们都没有包含什么。
这就是问题所在:http://jsfiddle.net/jn33bgkd/
你不需要使用document.getElementById
,因为Javascript自动创建具有相同名称的id的全局变量(我知道这是一个坏的做法,使用这些,我只是想知道什么是行为)但是,如果ID有破折号,则不会创建这些全局变量。问题是,是否真的没有创建带有破折号ID的元素的全局变量,或者创建了一个不同的名称。
在JavaScript中,test-one
是一个包含两个标识符test
和one
以及-
操作符的表达式;本质上是两个不相关变量之间的算术减法。因此,直接写test-one
是行不通的。
然而,该元素仍然可以使用索引器访问,即window['test-one']
。
window['test-one'].innerHTML = 'Test';
<div id="test-one"></div>
注意,一个ID为"test-one"的元素永远不会反映为全局testOne
,因为它会与一个ID为"testOne"的元素产生冲突。
此行为最初是非标准的,其根源在于IE遗留。它现在被记录在HTML5和HTML生活标准中,尽管前者认为它不规范。据推测,这样做是为了促进与遗留文档的跨浏览器兼容性。
相关问题:DOM树元素与id成为全局变量吗?
你所要求的是所谓的"inflection",这是当字符串,如"test-one"被解释为"testOne"。
通常有一些语言采用这种方法(例如:Ruby);然而,这通常不是一个很好的方法,因为它需要带有规则的库来定义变化,并且变量并不总是标准化的。
记住,你总是可以快捷地使用方法:
var x = document.getElementById;
var testOne = x("test-one");
你考虑过使用文档吗?querySelector和document.querySelectorAll?
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在page.open()-PhantomJS中无法访问全局变量
- 使用全局变量来存储数字(JavaScript)
- 如何将变量声明为全局变量
- 在节点中创建文件全局变量
- 为什么html id在浏览器中显示为全局变量
- 使用全局变量为动态创建的元素分配唯一id和唯一名称
- 根据存储在全局变量中的 id 检查/查找元素
- 通过全局变量访问具有id的元素
- 无法将event.target.id保存到全局变量中
- twitter bootstrap-Xpages,需要全局变量将字段的新ID映射回字段的原始ID,以便可以与客户端Jav
- 在JavaScript中如何处理带有破折号的ID'(自动创建全局变量)