我应该使用什么算法和工具来创建CSS特异性计算器



我正在考虑制作一个计算CSS特异性的函数,这是一个相当简单的计算。基本上,#somestring的每个实例都值100.somestring:somestring的每个实例值10somestring的每个实例均值1

示例:

"#mydiv p"-->101

"ul>li>a"-->3

"div.pull-right img"->12

"body#homepage #home-side-box div.row.pull-left[name="thisrow"]:after"->232

因此,该功能类似于

unsigned long specificity ( const std::string & slctr )
{
// ....
}

现在,我不希望这是一个简单的实现,因为我意识到其中会有很多细微差别,但我想知道是否有人能给我一些关于算法和工具的提示,我应该使用这些算法和工具来实现高效和干净的东西。例如,我假设我应该使用std::regex_iterator,对吗?

选择器的特异性实际上不是一个数字。你不能把不同类型的特异性当作整数来比较。

在您的示例中,将10分配给类,将1分配给标记名,这意味着如果选择器包含10个以上的标记名,那么它将比只包含类的选择器具有更大的特异性。但事实并非如此。

如果你绝对坚持返回一个值,你可以做的是使用非常大的差异,比如说,一个类使用212,一个ID使用224。然后,该算法只会在标记名超过4096的选择器上失败。

然而,正确的方法不是尝试计算单个值,而是制作一个比较两个选择器的函数。如果一个选择器包含的ID比另一个多,则其特异性最高;return"一"。如果ID的数量相同,则比较类的数量。依此类推,直到找到差异,否则返回"相等"。

最新更新