【问题标题】:When to use the `#` symbol to get a DOM element?何时使用 `#` 符号获取 DOM 元素?
【发布时间】:2020-07-08 17:51:38
【问题描述】:

有时我需要得到这样的元素:

var object = document.getElementById('ObjectName');

有时像这样:

var object = document.getElementById('#ObjectName');

它们有什么区别?

【问题讨论】:

标签: javascript html dom getelementbyid


【解决方案1】:

不,你看不到

var object = document.getElementById('#ObjectName');

您看不到,因为这意味着元素的 id 以 # 开头,而 HTML4 id 只能以 "with a letter ([A-Za-z])" 开头。

您有时会看到人们使用 jQuery 库,其中的查询语言允许您使用以下方法查找对象

var elem = $('#objectId');

而且在未来,您会看到越来越多的人使用与querySelectorquerySelectorAll 类似的查询语言。

【讨论】:

  • 但是以# 开头的id 属性在HTML5 中是公平的游戏,所以发问者在技术上可以 看到该代码。
  • @FrédéricHamidi “我一直使用它”让我觉得 OP 没有处理从 HTML 的最新版本中获取的代码。
  • 这个答案有点过时了(HTML5允许#开头,尽管建议以字母开头,现在是未来)。其他答案是最新的。至少修复不匹配的括号。
【解决方案2】:

#ID selector in CSS 的一部分。有一些库和方法支持 CSS 选择器来选择元素,例如 jQuery 和原生 DOM 方法 querySelectorquerySelectorAll

但在“传统”DOM 方法中,# 没有特殊含义。 getElementById('#ObjectName') 将选择一个 字面意思 具有 ID #ObjectName 的元素,即<div id="#ObjectName">

【讨论】:

    【解决方案3】:

    前者得到一个带有id="ObjectName"的元素。 后者得到一个带有id="#ObjectName"的元素。

    Selector 的上下文中(例如,由CSS 和document.querySelector 使用,但不适用于getElementById),# 字符表示它后面的文本是一个ID。

    document.querySelector('ObjectName')(使用类型选择器)将获得 <ObjectName />(无效的 HTML),而 document.querySelector('#ObjectName') 将获得带有 id="ObjectName" 的元素。

    【讨论】:

      【解决方案4】:
      '#ObjectName'
      

      JQuery(编辑: 或其他 JavaScript 库)

      'ObjectName'
      

      DOM (getElementById)

      【讨论】:

      • 选择器语法在更多地方使用,然后是 JS 库。
      • 你说得对,我只是习惯了,所以在考虑 JS 库时首先想到的是。
      猜你喜欢
      • 2015-04-22
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2022-12-05
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多