相关疑难解决方法(0)

带有id的DOM树元素是否成为全局变量?

研究一个简单的HTMLElement包装器的想法我偶然发现了Internet Explorer和Chrome的以下内容:

对于DOM树中具有ID的给定HTMLElement,可以使用其ID作为变量名来检索div.所以对于一个喜欢的div

<div id="example">some text</div>
Run Code Online (Sandbox Code Playgroud)

Internet Explorer 8和Chrome中,您可以执行以下操作:

alert(example.innerHTML); //=> 'some text'
Run Code Online (Sandbox Code Playgroud)

要么

alert(window['example'].innerHTML); //=> 'some text'
Run Code Online (Sandbox Code Playgroud)

那么,这是否意味着DOM树中的每个元素都转换为全局命名空间中的变量?它是否也意味着可以使用它作为getElementById这些浏览器中方法的替代品?

javascript dom global-variables identifier getelementbyid

341
推荐指数
5
解决办法
4万
查看次数

从JS中的ids自动创建变量?

就在今天经过几年的javascript编程之后,我遇到了令我吃惊的东西.浏览器为每个具有id的元素创建对象.对象的名称将与id匹配.

所以如果你有:

<div id ="box"></div>
Run Code Online (Sandbox Code Playgroud)

你可以做:

alert(box); //[object HTMLDivElement]
Run Code Online (Sandbox Code Playgroud)

没有先为该变量分配任何内容.看演示.

由于某种原因,这似乎是在标准中,即使它在某些情况下可能会破坏代码.有一个开放的bug来结束这种行为,但我现在更感兴趣摆脱它.

你们知道是否有办法禁用它(严格的模式可能)?我是否过分重视?因为这看起来确实是一个坏主意.(它是由IE推出给你一个提示).

更新:似乎FF只在怪癖模式下执行此操作.像IE6 +和Chrome这样的其他浏览器可以立即实现.

javascript

36
推荐指数
2
解决办法
3382
查看次数

为什么我可以在不使用getElementById()的情况下访问表单中的元素?

今天发现了这种奇怪的行为.如果我有以下HTML:

<form>
  <h1 id="test">Test</h1>
</form>
Run Code Online (Sandbox Code Playgroud)

为什么这个JS工作:

console.log(test); // This outputs the <h1> element. 
                   // Why does this work? Shouldn't `test` be undefined?
Run Code Online (Sandbox Code Playgroud)

我还没有宣布test其他地方.这种行为似乎只发生在一个内部的元素<form>.

html javascript forms dom

5
推荐指数
0
解决办法
38
查看次数

JavaScript未定义的变量是自动定义的?

JavaScript是否自动尝试将未定义的变量定义为:

document.getElementById('someUndefVarName')
Run Code Online (Sandbox Code Playgroud)

如下所示,以下似乎是等效的:

<div id="myUndefVar">:)</div>
<script>
    alert(myUndefVar); // why does this work!?
    alert(document.getElementById('myUndefVar'));
</script>
Run Code Online (Sandbox Code Playgroud)

参见JSFiddle示例:http://jsfiddle.net/AH35k/1/

或者是其他发生的事情,我不明白?这真的让我措手不及,因为我正在使用"use strict",因此我预计会出现一些错误.

javascript

2
推荐指数
1
解决办法
261
查看次数

从具有相同ID的多个跨度中删除文本

我有多个跨度

<span id ="myId">data1</span>
<span id ="myId">data2</span>
<span id ="myId">data3</span>
<span id ="myId">data4</span>
<span id ="myId">data5</span>
Run Code Online (Sandbox Code Playgroud)

我想在单击按钮上删除所有范围内的文本.

我在javascript按钮单击时尝试了这个

document.getElementById("myId").innerHTML = "";
Run Code Online (Sandbox Code Playgroud)

但它只从第一个跨度中删除文本

html javascript

-7
推荐指数
1
解决办法
4297
查看次数