【发布时间】:2021-07-11 23:38:06
【问题描述】:
所以 CSS 特性 rules 规定 id 是最强大的,然后是类,然后是标签名称,然后是 *。
所以#id > .class > div > *。
如果我提供一串 CSS 选择器,我要做的是为每个选择器获得一个“评级”。
假设我有一个特异性数组 = [#id, .class, tagname]
span 应该返回 [0, 0, 1]
body p 应该返回 [0, 0, 2]
.red .orange 应该返回 [0, 2, 0]
menu .item #checkout.active 应该返回 [1, 2, 1]
我试过这段代码,但肯定有问题:
function compare(a) {
const comparisonOperators = ["#", ".", " "];
const aRating = [];
for (let x = 0; x < comparisonOperators.length; x++) {
aRating[x] = a.includes(comparisonOperators[x])
? a.split(comparisonOperators[x]).filter((x) => x).length
: 0;
}
console.log(aRating);
}
compare("menu .item #checkout.active");
// returns [2,3,3]
对此有什么想法吗?
【问题讨论】:
-
计数准确。当你在'#'上拆分时,你有两个元素'menu .item'和'checkout.active'当你在'.'上拆分时你有三个元素'menu','item @checkout'和'active'当你在“”上拆分时,你也有三个元素“menu”,“.item”和“#checkout.active”
标签: javascript css-selectors css-specificity