为什么在同一页上有多个具有相同id属性的HTML元素是不好的做法?我正在寻找一种方法向不熟悉HTML的人解释这一点。
我知道HTML规范要求id必须唯一,但这听起来并不是一个令人信服的原因。我为什么要关心别人在某些文档中编写了什么?
我能想到的主要原因是,具有相同id的多个元素可能会导致JavaScript函数(如document.getElementById)出现奇怪和未定义的行为。我也知道它可能会导致URL中的片段标识符出现意外的行为。还有其他任何让HTML新手感到有道理的原因吗?
为什么在同一页上有多个具有相同id属性的HTML元素是不好的做法?我正在寻找一种方法向不熟悉HTML的人解释这一点。
我知道HTML规范要求id必须唯一,但这听起来并不是一个令人信服的原因。我为什么要关心别人在某些文档中编写了什么?
我能想到的主要原因是,具有相同id的多个元素可能会导致JavaScript函数(如document.getElementById)出现奇怪和未定义的行为。我也知道它可能会导致URL中的片段标识符出现意外的行为。还有其他任何让HTML新手感到有道理的原因吗?
根据您的问题,您已经知道w3c对此的解释:
id属性指定HTML元素的唯一标识符(id属性值必须在HTML文档中是唯一的)。
id属性可用于指向样式表中的样式。
id属性还可以由JavaScript(通过HTML DOM)用于更改具有特定id的HTML元素。
id的重点是它必须是唯一的。它用于标识元素(或任何东西:如果两个学生具有相同的学生ID,则学校将分崩离析)。这不像人名,不需要唯一。如果数组中的两个元素具有相同的索引,或者两个不同的实数相等...宇宙将会崩溃,这是其身份定义的一部分。
我认为你应该使用class来完成你想做的事情(ps:你想做什么?)。
希望能对您有所帮助!
为什么我要关心别人在某个文档中写了什么?
你应该关心,因为如果你正在编写HTML,它将在由关心的人编写的浏览器中呈现。 W3C创建了规范,Google,Mozilla,Microsoft等公司都在遵循它,所以你也有兴趣遵循它。
id
的元素可能会破坏您的应用程序。<p id="my_id">One</p>
<p id="my_id">Two</p>
CSS很宽容,这将使两个元素都变成红色:
#my_id { color:red; }
但是使用JavaScript,这样只会样式化第一个元素:
document.getElementById('my_id').style.color = 'red';
这只是一个简单的例子。当您使用JavaScript编写依赖于唯一id的任何内容时,整个应用程序可能会崩溃。每天都有人在这里发布问题,实际上出现了这种情况-由于开发人员使用了重复的id属性,某些关键功能已经损坏。
因为如果您有多个具有相同ID的HTML元素,则它不再是标识符了,对吧?
为什么两个人不能拥有相同的社会安全号码?
<span class="Annotation" id="A01">Bla bla bla</span>
标签分成多个片段,但该选择的所有片段都应该使用同一个“id”进行标识。
<a name="..."/>
在HTML中,您可以使用getElementsByName查找元素。这与此类似。但不幸的是,HTML规范已经开始弃用它,这是一个坏主意,因为它留下了一个重要的用例没有简单的解决方案。
当然,使用XPath,您可以使用任何属性甚至文本节点作为ID来执行任何操作。显然,XPointer规范允许您通过任何XPath表达式引用元素,并将其用作URL片段引用,如
http://my.host.com/document.html#xpointer(id('A01'))
http://my.host.com/document.html#A01
http://my.host.com/document.html#xpointer(/*/descendant-or-self::*[@id = 'A01'])
http://my.host.com/document.html#xpointer(/*/descendant-or-self::*[@name = 'A01'])
http://my.host.com/document.html#xpointer(/*/descendant-or-self::*[@annotation-id = 'A01'])