问题 jquery假设元素id?正常的行为? [重复]


这个问题在这里已有答案:


5355
2017-10-03 12:21


起源

不是特定于jQuery,而是Javascript。从来没有注意到这一点,好问题。这是一个小提琴,演示了以上内容: jsfiddle.net/Blade0rz/rjwPA/1 - CodingIntrigue
它找到了 window.foo,这是ID的元素。 - Archer
这巧合地证明了原因 ids需要在DOM中是唯一的,否则行为将是不确定的。 - David


答案:


这与jQuery无关。

这是因为命名元素(带有元素的元素) ID 要么 name attribute)成为window对象的属性。

console.log(foo) 是完全相同的 console.log(window.foo);

既然你的 div 是一个命名元素(id="foo"),它被添加到 window

在窗口上命名访问


7
2017-10-03 12:28



但不是在每个浏览器中,它不是规范的一部分。 - plalx


它不是jQuery行为,它(最初)是Internet Explorer行为。 IE总是为每个拥有的DOM元素创建全局变量 id 属性。变量以。命名 id 并引用DOM元素。最近,其他浏览器一直在效仿。


2
2017-10-03 12:30





JQuery没有假设,而是JavaScript。你的 foo 是不加引号,因此它必须是标识符或未定义。 id为的元素 foo 恰好位于脚本范围内,因此会记录由其标识的元素。

如果您将其重命名为 bar,那么你就可以参考了 bar 因为它是一个顶级的id。

请注意,这种用法是不受欢迎的,因为在不引用html的情况下不清楚你在代码中做了什么。运用 document.getElementById(...) 或者其变体通常是优选的,因为它清楚你正在做什么。


0
2017-10-03 12:30