我应该使用什么算法和工具来创建CSS特异性计算器
What algorithms and tools should I be using to create a CSS specificity calculator?
我正在考虑制作一个计算CSS特异性的函数,这是一个相当简单的计算。基本上,#somestring
的每个实例都值100
,.somestring
或:somestring
的每个实例值10
,somestring
的每个实例均值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的数量相同,则比较类的数量。依此类推,直到找到差异,否则返回"相等"。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在运行中期切换GTK CSS style_context
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 为什么C++应用程序不能创建像php,html和css这样的接口?
- 我应该使用什么算法和工具来创建CSS特异性计算器