【问题标题】:CSS and jQuery: .name vs name^= (i.e. classes vs "id arrays")CSS 和 jQuery:.name 与 name^=(即类与“id 数组”)
【发布时间】:2013-11-14 17:59:14
【问题描述】:

考虑以下三种情况:

(1):

<div class="zones"></div>
<div class="zones"></div>
<div class="zones"></div>

vs (2):

<div id="zone1"></div>
<div id="zone2"></div>
<div id="zone3"></div>

vs (3):

<div id="zone1" class="zones"></div>
<div id="zone2" class="zones"></div>
<div id="zone3" class="zones"></div>

鉴于您可以相应地使用 .zonesdiv[id^=zone] 选择器(在 CSS 和 jQuery 中)来定位每个 &lt;div&gt;

使用 (1) 或 (3) 比 (2) 有什么优势吗?

【问题讨论】:

    标签: jquery html css jquery-selectors css-selectors


    【解决方案1】:

    ID 的目的是唯一标识一个元素。如果您不需要单独识别每个元素,则没有理由为每个元素指定一个 ID。同样,如果您不需要将这三个元素相互关联,则没有理由为它们分配一个通用的类名。

    如果您因为需要 ID 和类而选择选项 3,那么您就需要考虑选择器之间的区别。

    在 CSS 中,.zonesless specific 而不是 div[id^=zone],因为缺少类型选择器(类选择器和属性选择器本身同样特定)。当然,如果要平衡两个选择器的特异性,可以考虑div.zones,而不是.zones

    类选择器通常也经过优化,因此在 CSS 和 jQuery 中匹配起来要简单得多。由此产生的性能差异并不显着,但如果您可以按类匹配完全相同的元素,则没有理由不使用类选择器而不是属性选择器。因此,同样,如果您要将三个元素作为一个组进行样式设置或操作,请为它们分配一个类名并按该类进行选择。

    【讨论】:

    • 即使您不需要单独识别每个元素,而只需将所有元素作为一个组来定位,为什么您更喜欢类而不是“索引 id”?您仍然可以使用属性选择器匹配所有元素,并且您获得了一个优势:如果将来您需要单独定位一个元素,您已经将它们唯一标识,因此您无需更改 HTML!使用类没有任何优势!
    • id^=zone 不仅针对zones。另外,我认为它应该比类选择器慢。
    • @Racso:你从来没有说过要改变现有的 HTML。您所做的只是提出三个选项并询问每个选项的优点。我的意思是,如果您不需要这些 ID,请不要使用 ID。如果您只想将它​​们称为一个组,请使用一个类。
    • @Racso:如果您出于某种原因尝试缩小 HTML,则可以使用 :nth-child():nth-of-type() 选择器更进一步,而不必使用 either i> ID 或类属性。但由于这超出了您的问题范围,我不会详细说明。
    • @BoltClock 如果将给定选项置于某些上下文中,则会看到优点/缺点。我们假设它们是一些现实生活中的代码的一部分,甚至可能在未来发生变化(例如,如果有人问“使用内联样式有什么缺点?”,一个有效的答案是“你必须修改你的如果你想改变样式,现有的标记”)。关于第 n 个子选择器:请详细说明;我不认为这超出了范围。但是,我认为它不一样:通过使用“索引 ID”,您可以在不破坏选择器的情况下移动代码中的元素)。
    【解决方案2】:

    这完全取决于情况。就我个人而言,我不关心节省那些纳秒,而是想编写一个每个开发人员都能理解的更干净的 html(更多基于类,因为 id 可以在 javascripting 中更多地使用)

    您显然可以使用 class、tags、child + siblings selectorsnth-child 编写整个 html。

    只是一个例子:

    .mainclass > .innerclass > a{
    cloro:red;
    }
    

    如果你分配id=something to a tag,同样的事情可以做:

    #something{
    color:red;
    }
    

    使用类:仅当多个 dom 元素共享相同特征时。

    使用Id:仅当不同的dom元素共享独特的特征时。

    但归根结底。这一切都归结为编写更清晰、更简单且易于理解的代码。

    【讨论】:

    • 不..我完全明白你的意思,但我要说的是随着代码的增加..管理它变得有点困难..让我们说如果有人用id而不是类来设置元素的样式。 .这肯定可以完成这项工作,但作为开发人员,我总是将 id 用于 javascript 目的,我相信设计必须处理类。这是最好的做法。简单,避免很多混乱。无论哪种方式..两者他们很容易理解
    猜你喜欢
    • 2015-03-24
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多