在CSS和jQuery中使用类/ id选择器,我经常看到两种不同的方法:
1。只是课程或ID:
CSS:
.foo{}
#bar{}
jQuery的:
$(".foo")
$("#bar")
2。带有标记的类或ID:
CSS:
div.foo{}
div#bar{}
jQuery的:
$("div.foo")
$("div#bar")
我的问题是:除了使用标签进一步细化选择器之外,将标签与class / id放在一起有什么不对吗?哪种语法正确?
我听过一些人说,除非标签是特殊需要的,否则放置它是错误的。虽然其他人说它没有任何区别,实际上更喜欢它,因为它提供了有关选择器的更多信息。
您怎么看?
答案 0 :(得分:5)
答案 1 :(得分:5)
包含标签
$("div.foo")
或div.foo{}
您正在给浏览器一只手,告诉它不要搜索具有某个类或ID的每个元素。相反,在上面的示例中,它只会搜索div
s。
虽然在单个元素或小页面上的性能可以忽略不计,但如果你在谈论一个包含数千个标签和几个不同的css或jQuery调用的文档,它可能会增加。
区分两个元素
在某些情况下,您可能也需要它来区分具有相同类的两个元素。
特殊性
另外,我认为你应该尽可能包含这些元素,以尽可能地使你的CSS(和jQuery)具体化......将惊喜降到最低!
更适合共享代码/故障排除/更新
当元素包含在规则中时,查找/更改/编辑规则也更容易。
修改强>
回应@ stefmikhail关于@ YoTsumi基准测试的评论,不同之处在于:
搜索唯一ID始终是最快的事情,因为页面上应该只有一个ID,并且引擎需要单独查找它。但是,正如@BoltClock所提到的,这个问题不仅仅是性能问题。
答案 2 :(得分:1)
我认为(CSS或jQuery)的选择器引擎尽可能具体(即包含标签)更具性能 - 但您可能永远不会注意到差异。以下是jQuery创建者John Resig讨论人们在jQuery代码中使用的选择器的引用:
例如,“。class”比“tag.class”更受欢迎,即使第二个更高效。对此尤为重要的是,性能受到的影响程度并不是很大。例如,4ms和30ms之间的差异几乎是不可察觉的。 (Source)
答案 3 :(得分:1)
在jquery中,普通ID是您在文档上找到元素的最快方式,下一个(现在我说对所有版本的浏览器来说速度最快)。因为jquery使用document.getElementById
来查找DOM元素。另一方面,Class可能很棘手,sizzle会在它上运行,而我实际上认为div.foo比.foo更快,因为元素的集合分配得更低,然后查看DOM中的所有元素。现代浏览器的查询选择器将比使用元素名称更快(请注意,我还没有对此进行过测试)。较旧的浏览器会比.class更快地找到div.class,但在现代浏览器中,你应该反过来。
答案 4 :(得分:1)
从Wiley的Smashing CSS书中引用它“
很难说快三次,甚至更难以彻底掌握,但这是关键 了解CSS规则如何相互作用。 特异性是选择器的“特定性”的数字表示。有三种 用于确定选择器的特定城市的东西:
答案 5 :(得分:0)
就我个人而言,我喜欢痒痒的猫头鹰。
有时很高兴看到标签名称提醒您(和您的)同事您实际使用的是什么以及您可以期待什么样的行为。
我觉得使用它们都没问题。
选择最自然的感觉(不会让你的眼睛受伤)