1

根据mdn

后代选择器是 CSS 中最昂贵的选择器。它是可怕的昂贵 - 特别是如果选择器处于标签或通用类别。

当 Modernizr 启动时,它会将所有不支持的类添加到html标签中。

这意味着他以后可以这样做:

.myNotSupportedClass .myLastDiv   <-- notice descendants selecotr[ ]
{
  color:red;
}

但这绝对是一个缓慢的操作,一个可以优化的操作......它必须遍历所有 DOM 树才能找到 div。
我知道没有其他方法可以做到,但仍然:

1)他们本可以将这些类添加到body/form更接近元素的类中。所以搜索会减少。

还是我错了……,?

4

1 回答 1

2

但这绝对是缓慢的操作

嗯。

他们本可以将这些类添加到body/form更接近元素的类中。所以搜索会减少。

body: 少了多少搜索?少1级?这有多大的不同?

form: 不是每个页面都有表单,页面可以有多个表单。元素本身也可以放置在页面正文中的form任何位置,因此在 Modernizr 类上下文中应受选择器影响的元素很可能与它无关,从而完全无法搜索。

随心所欲,但由于 Modernizr 选择在html元素上放置类,因此请编写使用这些类和后代选择器的上下文选择器。如果您对后代选择器性能如此着迷,那么您可以选择不使用 Modernizr 并失去它带来的所有特征检测优势。

为什么它选择在html元素上放置类是任何人的猜测。它可能是放置它们最方便的元素。

于 2013-01-17T08:18:20.523 回答