【发布时间】:2019-01-05 14:03:55
【问题描述】:
我需要编写一个 javascript 函数,它比较传入的两个参数。它们将是字符串。并表示 CSS 类。
该函数的目的是衡量 CSS 的特异性。因此,如果传入的参数是 CSS ID,则应该返回它而不是第二个参数。 (例如,如果 a = '#id',它将击败 b = '.red')。
有点迷失在我的 javascript 函数的最佳方法上。不确定是使用 if/else 语句还是 switch/case。无论哪种方式,它都会变得混乱,需要一些指示。
这是我想要做的:
- 比较参数 a 和 b,两者都是字符串。
- 如果输入的 css 类是一个 id,(例如,'#id'),这将胜过所有其他 css 类。所以返回这个。
- 如果 css 类是标记名,ID 仍然胜过它。所以返回 ID。
- 如果输入了“*”,则这没有特异性,因此任何其他类都优于它。
-
类选择器胜过标记名。 (例如 div.red > p)。
// '*' weakest - anything beats this // tagname beats '*'. EG 'div' beats '*' // 2 tagnames beats 1 tagname - EG 'div div' beats 'p' // class selector beats tagname - EG 'div.red' beats 'div' // id is strongest #id - '#ID' beats all the above function compare(a,b){ const low = '*'; const tagname = /^[a-zA-Z]+$/; const twoTagnames = /^[a-zA-Z\s]*$/; if (a === low) { a < b; return b; } else (b === low); { b < a; return a; } if (a.includes('#')) { a < b; return b; } else if (b.includes('#')) { b < a; return a; } } compare('*','#id');
【问题讨论】:
-
我会使用以下文档作为参考:developer.mozilla.org/en-US/docs/Web/CSS/Specificity
-
@codeWonderland - 谢谢,我知道 css 的特殊性是什么。我需要帮助编写一个比较 css 类的 javascript 函数,并将其传递给一个 javascript 函数。返回权重较高的类。
-
@AuxTaco - 谢谢,但我没有使用 React。我需要在 Vanilla JS 中执行此操作!
-
@ReenaVerma 我认为过去发送的两个 cmets 并不是为了解决您的问题,它们只是关于如何开始自己构建它们的建议。如果它们是解决方案,它们会显示为答案,您可以标记为正确的解决方案
标签: javascript css-selectors string-comparison css-specificity