为什么HTML ID不像命名空间那样工作?

时间:2008-12-25 21:51:10

标签: html

对我来说,HTML会支持这一点似乎很自然:

<div id="comment1">
    <div id="helpText">...</div>
</div>

<div id="comment2">
    <div id="helpText">...</div>
</div>

<div id="comment3">
    <div id="helpText">...</div>
</div>

#comment1#helpText
#comment2#helpText
#comment3#helpText

但是由于HTML ID必须是唯一的,我需要这样做:

<div id="comment1">
    <div id="helpText1">...</div>
</div>

<div id="comment2">
    <div id="helpText2">...</div>
</div>

<div id="comment3">
    <div id="helpText3">...</div>
</div>

#comment1#helpText1
#comment2#helpText2
#comment3#helpText3

这似乎是不必要的多余,特别是当我有多个嵌套的DIV时:

<div id="comment1">
    <div id="header1">...</div>
    <div id="introduction1">...</div>
    <div id="helpText1">...</div>
    <div id="footer1">...</div>
</div>

<div id="comment2">
    <div id="header2">...</div>
    <div id="introduction2">...</div>
    <div id="helpText2">...</div>
    <div id="footer2">...</div>
</div>

<div id="comment3">
    <div id="header3">...</div>
    <div id="introduction3">...</div>
    <div id="helpText3">...</div>
    <div id="footer3">...</div>
</div>

任何人都可以给我一些背景知道为什么会出现这种情况,或许还有一些解决办法让HTML ID更符合名称空间隐喻的作用吗?

6 个答案:

答案 0 :(得分:18)

使用class

id仅标识该元素和该元素。它就像是指向C ++中对象的指针。没有id的元素就像没有命名(?)指针的对象。

Class es就像属性一样。元素可以具有class es的任何组合中的零个或多个。他们给你你想要的东西。

/* CSS */
#comment1 .header
#comment3 .helpText

<!-- (X)HTML -->
<div id="comment1">
    <div class="header">...</div>
    <div class="introduction">...</div>
    <div class="helpText">...</div>
    <div class="footer">...</div>
</div>

DOM本身没有适合Javascript(和其他脚本语言)的选择器,但是像JQuery这样的工具包允许你很好地按类名选择元素。

答案 1 :(得分:3)

在第一个例子中,你可以使用它:

#comment1 .helpText
#comment2 .helpText
#comment3 .helpText

您不必为helpText元素定义id,而是定义class="helpText"的类。

您还可以使用以下规则操纵所有子div:

#comment1 div
#comment2 div
#comment3 div

如果你想操纵“评论”节点的所有孩子,你可以将class="comment"添加到这些评论div并使用

访问它们
div.comment

答案 2 :(得分:3)

您可能实际上想问一个问题,“为什么我们在CSS中根本需要ID?” - 如果一个类可以是唯一的也可以是非唯一的,为什么我们需要另一种必须具有唯一性的标识符?

我的回答是我们在CSS中实际上并不需要它们,但它们在DOM中需要用于其他目的。例如,<label>元素可以使用该元素的唯一ID来标识它标记的其他元素。

如果他们将在DOM中出现,我们需要在CSS中访问它们。

答案 3 :(得分:1)

使用课程。

答案 4 :(得分:1)

stesch说的是什么。像这样:

 <div id="comment1">
    <div class="helpText">...</div>
</div>

<div id="comment2">
    <div class="helpText">...</div>
</div>

<div id="comment3">
    <div class="helpText">...</div>
</div>

然后:

#comment1.helpText
#comment2.helpText
#comment3.helpText

答案 5 :(得分:0)

当strager写道:

使用类。

请记住,一个元素可以同时属于几个类:

<div id="comment1">
    <div class="header introduction">...</div>
    <div class="introduction">...</div>
    <div class="footer introduction somethingelse">...</div>
</div>