我已经创建了这段代码来计算CSS规则的优先级
var selectorText = "body";
A = selectorText.match(/#/gm); // id
A = !A ? 0 : A.length;
B1 = selectorText.match(/\\./gm); // class
B1 = !B1 ? 0 : B1.length;
B2 = selectorText.match(/[[]/gm); // attribute selector
B2 = !B2 ? 0 : B2.length;
B3 = selectorText.match(/[\\w\\d_\\s^]:(?!:)/gm); // pseudo třída
B3 = !B3 ? 0 : B3.length;
B = B1 + B2 + B3;
C1 = selectorText.match(/::/gm); // pseudo element
C1 = !C1 ? 0 : C1.length;
C2 = selectorText.match(/\\w+[$\\s#\\.:\\[]/gm); // element
C2 = !C2 ? 0 : C2.length;
C = C1 + C2;
A *= 10000;
B *= 100;
alert(C)
选择器中的匹配项(A,B或C)不得超过100个。由于某种原因,C的结果为0(但我使用“ body”选择器)。您能建议如何更正最后一场比赛吗?您还会在代码中看到任何错误吗?
笔记:
最初的问题只是说“ body”选择器,但我想到任何选择器或多个选择器,例如:“ div#menu ul li,div#id,div.class”选择器可以包含伪类,伪元素,属性选择器。在C2正则表达式的情况下,我试图查找元素的数量,在这里最后一个字符串中的元素总数为5个元素(那么C2应该为5个元素)。
selectorText
不包含::
,C1 = selectorText.match(/::/gm);
应退货null
; C1 = !C1 ? 0 : C1.length;
回报0
; C2 = selectorText.match(/\\w+[$\s#\\.:\\[]/gm);
回报null
,C2 = !C2 ? 0 : C2.length;
回报0
; C = C1 + C2;
等于0
; 那是0 + 0 = 0
最初的问题只是说“ body”选择器,但我想到任何选择器或多个选择器,例如:“ div#menu ul li,div#id,div.class”选择器可以包含伪类,伪元素,属性选择器。对于C2正则表达式,我试图查找最后一个字符串中总共有5个元素的元素数(那么C2应该是5个)
您可以使用.split()
withRegExp
/,|\s/
分割多个选择,
符。.map()
,.filter(Boolean)
删除空字符串,.match()
与RegExp
/^[a-z]+(?=[.#:\s]|$)/i
相匹配的元素。
var selectorText = "div#menu ul li, div#id, div.class";
C2 = selectorText.split(/,|\s/).filter(Boolean)
.map(el => el.trim().match(/^[a-z]+(?=[.#:\s]|$)/i)[0]);
console.log(C2);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句