获取代码中使用的所有 CSS 类选择器,这些选择器没有定义 CSS 规则集 [关闭]

Posted

技术标签:

【中文标题】获取代码中使用的所有 CSS 类选择器,这些选择器没有定义 CSS 规则集 [关闭]【英文标题】:Get all CSS class selectors used in code, which doesn't have CSS ruleset defined [closed] 【发布时间】:2018-07-30 18:35:10 【问题描述】:

如何列出我在整个代码中使用的所有 CSS 类,没有为其定义“CSS 规则集”

类似

/*Definition (or Rule set) for .some-random-class 
doesn't exist or is commented out like below

.some-random-class 
  width: 100vw;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;


*/

.known-class 
  background-color: red;
  width: 100px;
  height: 100px;
<div class="some-random-class">
  <span class="known-class"/>
</div>

我期待像 getAllUndeclaredCSS() 这样的东西返回 ['some-random-class'] 作为答案。


更新 1:这与“检查正在使用的 CSS 样式”不同,因为定义不存在,但用法存在

更新 2:我有初步答案可以帮助我开始。并非在所有情况下都有效,但在一定程度上有效。

【问题讨论】:

Is there a way to check which CSS styles are being used or not used on a web page?的可能重复 我正在寻找相反的情况。我没有定义 CSS 类(因为我删除了旧库),我的代码正在使用它。我需要一种方法来找出缺失的定义。 我怎样才能改写这个问题,以使其清楚? 这是一个与 CSS 使用相关的有效问题。我不是要任何书、软件库或插件。也不是教程请求。 关闭为什么?显然 CSS 问题仅限于诸如如何使用 CSS 绘制具有 11 个花瓣的花朵之类的问题,并且很受欢迎。 【参考方案1】:

这对我有用!

let elementsWithClass = document.querySelectorAll("[class]");
let classNames = new Set();
elementsWithClass.forEach(node =>
    node.classList.forEach(item => classNames.add(item))
);

let stylesheets = document.styleSheets;
let definitionsFound = new Set();
for (i = 0; i < stylesheets.length; i++) 
    rules = stylesheets[i].cssRules;
    for (j = 0; j < rules.length; j++) 
        if (rules[j].type === Cs-s-rule.STYLE_RULE) 
            let match = rules[j].selectorText.match(/\.[^\.: ]+?(?=\.| |$|:)/g);
            match && match.forEach(item => definitionsFound.add(item.replace(".", "")));
        
    


let missingDefs = [];
classNames.forEach(item => 
    if (!definitionsFound.has(item)) 
        missingDefs.push(item);
    
);
console.log(missingDefs);

打开您的网站后运行它!您将了解缺少 CSS 规则的 CSS 规则列表。感谢您的提示,@SalmanA

PS:如果您运行的是不支持Set 的旧版浏览器,请将其更改为数组并过滤掉重复项。

【讨论】:

【参考方案2】:

试试这个

:not([class])

这只会选择所有没有分配 css 类的类。

【讨论】:

这将给我所有没有给它类名的元素。我想你误解了这个问题。 我怎样才能改写这个问题,以使其清楚? 废话,我很抱歉没有用。希望你能尽快找到答案

以上是关于获取代码中使用的所有 CSS 类选择器,这些选择器没有定义 CSS 规则集 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

这 30 类 CSS 选择器,你必须理解!

css都有哪些选择器

css选择器都有哪些?各种选择器优先级大小顺序

2、css 选择器

CSS 选择器

CSSCSS 选择器 ① ( CSS 选择器作用 | CSS 选择器分类 | 标签选择器 | 类选择器 | div 与 span 标签 | 多类名选择器 )