3

从语言设计的角度来看,如果你可以有一个只有一个元素的类,那么为 HTML 创建 id 属性有什么意义呢?为什么不只使用类而不使标记复杂化?

我可以想到三种可能的解释,但它们并不能完全满足我,所以我想知道你是否知道为什么 id 包含在 HTML 中。我的想法是:

  1. id 的存在有助于创建 CSS 样式,因为它更大的特异性使得可以为类的一个成员提供一个 id,以覆盖为该类的其他成员提供的样式。这种解释并不完全让我满意,因为您可以只给它一个额外的类,并将该类的样式放在样式表底部的一个部分中,用于给单个元素的样式。
  2. 使用 jQuery 选择元素时,一旦找到具有该 id 的元素,DOM 遍历就会停止。因此,id 的存在将使选择运行得更快。这个解释不能让我满意,因为我相当肯定 jQuery 是在 id 和 classes 已经存在很久之后创建的。
  3. 将 id 作为语言功能有助于确保应该唯一的样式(和选择器)真正应用于一个元素,因为如果不是这种情况,事情就会变得混乱。这种解释不能让我满意,因为当您不小心创建了具有相同 id 的两个元素时,让您的网站中断似乎并不是一种特别有效的方式来通知您出了问题。
4

5 回答 5

4

第一个公开可用的 HTML 描述是名为“HTML 标签”的文档,由 Berners-Lee 于 1991 年底在 Internet 上首次提及

有一个锚标签的描述:

<A NAME=xxx HREF=XXX> ... </A>

HREF
...This allows for the form HREF=#identifier to
refer to another anchor in the same document.
NAME
The attribute NAME allows the anchor to be the destination of a link.

我认为这里的 NAME 属性是元素 ID 的前身:它允许您直接链接到超文本页面的所需部分(即使它是同一页面)。

于 2013-01-25T22:00:59.893 回答
3

ID 是唯一值,因此,当您使用诸如 javascript 之类的内容解析 html 时,您可以确定您的脚本将命中哪个元素。

于 2013-01-25T21:38:41.503 回答
2

无论如何,对于 Javascript来说,getElementById它比getElementsByClassName

测试操作/秒
getElementById 269,235
getElementsByClassName 86,369

ref

来自规范的更多信息

ID 类型属性的特殊之处在于,在一个符合标准的文档中,没有两个这样的属性可以具有相同的值,无论携带它们的元素的类型如何;无论使用哪种文档语言,都可以使用 ID 类型的属性来唯一标识其元素。

因此,这是一种唯一标识元素的方法,而类选择器只能巧合。

ref

于 2013-01-25T21:39:30.793 回答
1

有很多原因,其中大多数甚至不涉及 CSS。例如,ajax 和 JS 库通常需要唯一的 ID,而 ID 可以充当带有 URL 哈希的锚。

于 2013-01-25T21:37:27.513 回答
0

XML 源自 HTML,但用于更通用的数据。在 XML 中,通常希望有一个唯一的 id(这与在数据库中经常需要的方式相同)。因为 XML 在自动验证方面投入了大量精力,所以最好的方法是简单地将 id 属性添加为语言元素。这样,如果将相同的值分配给两个 id 属性,则 XML 验证器可以输出错误。

后来,许多 XML 特性又回到了 HTML,我猜 id 只是其中之一。它不是严格需要的,但与 Java Script 结合使用是一件好事。

于 2013-01-25T22:08:16.760 回答