-2

我在 html 页面中有一个这样的 dom 对象:

<textarea id="owctl7fzk">​foo</textarea>

当我尝试在getElementById不引用 id 的情况下访问它时,它会返回null.

window.document.getElementById(owctl7fzk)

但是当我将 id 放在单引号或双引号内时,它会选择对象:

window.document.getElementById('owctl7fzk')
window.document.getElementById("owctl7fzk")

为什么在这种情况下报价很重要?一般来说,什么时候可以省略,什么时候不能?

编辑在我上面提供的代码中,id 是一个十六进制数。我以前有一个没有引号的十进制数字作为 id,它没有问题。那是为什么?

4

4 回答 4

3

getElementById(owctl7fzk)选择其id属性等于owctl7fzk 变量值的元素:

var owctl7fzk = "the_id";
var element = document.getElementById(owctl7fzk);

owctl7fzk肯定和 不一样"owctl7fzk",因为前者是变量名,而后者是字符串。

这就是 JavaScript 的工作原理。仅仅因为你可以在 HTML 中省略引号并不意味着你可以在 JavaScript 中做同样的事情。

于 2013-03-29T02:10:16.660 回答
2

这是因为当 ID 在引号内时,它是一个用于标识 ID 属性的字符串,否则它是作为变量引用。如果您正在执行window.document.getElementById(owctl7fzk),则 javascript 正在搜索名为owctl7fzk. 如果你用过var owctl7fzk = 'owctl7fzk',它会工作的

于 2013-03-29T02:10:08.480 回答
0

它应该用引号引起来,因为您将字符串参数传递给 getElementById 方法。字符串需要用引号引起来。

于 2013-03-29T02:11:53.683 回答
0

在 javascript 中,与大多数语言一样,解析器将带引号的值理解为“字符串”,将不带引号的值理解为标识符(这过于简单化了,实际上,它是lexer,而不是解析器)。

具体到您的问题,元素的 id 是一个字符串,因此必须在您的源中表示为字符串。您可以使用变量(在代码中由您选择的标识符表示)来保存此字符串或保存元素本身:

var my_id = "owctl7fzk";
var elem = document.getElementById(my_id);
alert( my_id + " is the same as " + elem.id );
于 2013-03-29T02:16:13.987 回答