【问题标题】:Why does quoting matter with getElementById?为什么引用对 getElementById 很重要?
【发布时间】:2013-03-19 17:51:37
【问题描述】:

我在一个 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,它没有问题。为什么会这样?

【问题讨论】:

  • 只是因为getElementById 需要一个字符串。如果浏览器不会在全局范围内为具有 ID 的元素创建变量,getElementById(owctl7fzk) 实际上会抛出错误,因为owctl7fzk 是一个未定义的变量。
  • @FelixKling 浏览器真的那么做吗?这太疯狂了。

标签: javascript html dom


【解决方案1】:

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

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

var my_id = "owctl7fzk";
var elem = document.getElementById(my_id);
alert( my_id + " is the same as " + elem.id );

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-10
          • 1970-01-01
          • 2014-01-06
          • 2011-12-01
          • 2012-04-06
          • 2012-05-06
          • 2010-12-23
          相关资源
          最近更新 更多