提问人:Tony Fiorentini 提问时间:5/21/2013 更新时间:5/21/2013 访问量:1356
重复的定位点 ID 和 W3 约定
Duplicate Anchor IDs and W3 Conventions
问:
我今天正在将一个具有一些过时属性的页面转换为对 XHTML 更友好的页面,并遇到了锚标记的主题。具体说来:<a name="someName"></a>
将锚标记转换为 后,我的 IDE 给了我一些关于不要在锚标记中使用重复 ID 的友好建议。事实证明,W3 也是如此。<a id="someName"></a>
id 和 name 属性共享相同的命名空间。这意味着它们不能在同一文档中定义具有相同名称的锚点。允许使用这两个属性为以下元素指定元素的唯一标识符:A、APPLET、FORM、FRAME、IFRAME、IMG 和 MAP。当这两个属性用于单个元素时,它们的值必须相同。
尽管有重复,但该页面叛逆地工作,没有任何行为异常。
页面逻辑保证只有一个 HTML 元素使用给定的名称或 ID 呈现,因此不存在重复的 href。#someName
考虑到这一点:
上述用例是否仍然违反了 W3C 使用重复名称/ID 的准则?
将页面转换为使用唯一 ID 需要花费大量精力,但这样做可能有好处。我是这方面的新手,所以如果我错过了一些纯粹的哲学或明显的东西,我深表歉意。
答:
3赞
Explosion Pills
5/21/2013
#1
ID 在 DOM 中是唯一的。这对 JavaScript 有一个很容易注意到的影响:只会选择多个可用的元素之一。这可能是第一个,但无法保证是哪一个。document.getElementById('someName')
id="someName"
评论
0赞
Tony Fiorentini
5/21/2013
这可能是一个迟钝的后续问题,但它甚至可以选择当前设置为的元素吗?如果它从不以标记形式呈现,那么它仍然“存在”到 JavaScript 中吗?id="someName"
visible="false"
0赞
Explosion Pills
5/21/2013
@TonyFiorentini是的,它肯定仍然“存在”到 JavaScript 中
0赞
Tony Fiorentini
5/21/2013
在你说“DOM”(我第一次看到这个词)之后,我能够找到一篇相关的文章。我现在明白了 JavaScript 如何能够访问 DOM 元素,尽管它是可见的。现在想想,很明显它必须这样做。这完全回答了我的问题。谢谢!
0赞
Tony Fiorentini
5/21/2013
此外,作为后续问题的附录,DOM 元素在标记中甚至没有公开的“可见”属性,因此问题本身被误导了。更好的解释是,我的锚标记封装在asp:Panel中,它隐藏了有问题的锚标记。我假设你的答案仍然适用?
0赞
Explosion Pills
5/21/2013
@TonyFiorentini在这种情况下,也许不是;这取决于实际向用户发出的内容(例如在网页上)
评论