检查CSS类调用的次数。

检查CSS类调用的次数。,css,Css,我想写一个剧本,告诉我: if (classes[j].length && cssClasses[classes[j]] == null) { neverDefined.push(classes[j]); } 在我的代码中使用.CSS文件中定义的每个CSS类的频率 冗余CSS类-从未使用过的类 引用的CSS类不存在 但我只是想确定这样的事情不存在?是吗 if (classes[j].length &am

我想写一个剧本,告诉我:

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
  • 在我的代码中使用.CSS文件中定义的每个CSS类的频率
  • 冗余CSS类-从未使用过的类
  • 引用的CSS类不存在
但我只是想确定这样的事情不存在?是吗

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }

谢谢,只是为了好玩,我写了一篇

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
首先,我们需要找到我们的样式表。在实际的脚本中,这样编写会更好,但在JSFIDLE上可以使用

var styles = document.head.getElementsByTagName('style');
var css = styles[styles.length - 1].innerHTML;
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
然后删除注释和每个选择器的主体(即括号之间的内容)。之所以这样做,是因为背景图像属性中可能存在
.com
,或任何其他问题。我们假设文本字符串中没有
}
,因此这会导致问题

var clean = css.replace(/\/\*.*?\*\//g, '').replace(/\{[^}]*\}/g, ',');
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
我们可以找到带有正则表达式的类,然后计算它们出现的数量

var re_class = /\.(\w+)/g;
var cssClasses = {},  match, c;
while (match = re_class.exec(clean)) {
    c = match[1];
    cssClasses[c] = cssClasses[c] + 1 || 1;
}
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
我用它来展示我们的发现。这显示了每个类在CSS中被提及的次数

jsprint("css classes used", cssClasses);
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
多亏了谷歌,我们可以找到身体中的所有元素,并通过它们循环。默认情况下,我们假设HTML中没有使用任何类,并且所有使用的类都是定义的

var elements = document.body.getElementsByTagName("*");
var neverUsed = Object.keys(cssClasses);
var neverDefined = [];
var htmlClasses = {};
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
我们得到每个元素类,并在空间上拆分它

for (var i=0; i<elements.length; i++) {
    var e = elements[i];
    var classes = (e.className || "").split(" ");
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
看起来我们找到了一个没有出现在CSS中的类。我们只需要确保它不是空字符串,然后将它推送到数组中

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
还要计算每个类在HTML中使用的次数

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
        if (classes[j].length) {
            htmlClasses[classes[j]] = htmlClasses[classes[j]] + 1 || 1;
        }
    }
}
然后显示我们的结果

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
jsprint("html class usage", htmlClasses);
jsprint("never used in HTML", neverUsed);
jsprint("never defined in CSS", neverDefined);

只是为了好玩,我写了一个

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
首先,我们需要找到我们的样式表。在实际的脚本中,这样编写会更好,但在JSFIDLE上可以使用

var styles = document.head.getElementsByTagName('style');
var css = styles[styles.length - 1].innerHTML;
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
然后删除注释和每个选择器的主体(即括号之间的内容)。之所以这样做,是因为背景图像属性中可能存在
.com
,或任何其他问题。我们假设文本字符串中没有
}
,因此这会导致问题

var clean = css.replace(/\/\*.*?\*\//g, '').replace(/\{[^}]*\}/g, ',');
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
我们可以找到带有正则表达式的类,然后计算它们出现的数量

var re_class = /\.(\w+)/g;
var cssClasses = {},  match, c;
while (match = re_class.exec(clean)) {
    c = match[1];
    cssClasses[c] = cssClasses[c] + 1 || 1;
}
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
我用它来展示我们的发现。这显示了每个类在CSS中被提及的次数

jsprint("css classes used", cssClasses);
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
多亏了谷歌,我们可以找到身体中的所有元素,并通过它们循环。默认情况下,我们假设HTML中没有使用任何类,并且所有使用的类都是定义的

var elements = document.body.getElementsByTagName("*");
var neverUsed = Object.keys(cssClasses);
var neverDefined = [];
var htmlClasses = {};
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
我们得到每个元素类,并在空间上拆分它

for (var i=0; i<elements.length; i++) {
    var e = elements[i];
    var classes = (e.className || "").split(" ");
        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
看起来我们找到了一个没有出现在CSS中的类。我们只需要确保它不是空字符串,然后将它推送到数组中

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
还要计算每个类在HTML中使用的次数

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
        if (classes[j].length) {
            htmlClasses[classes[j]] = htmlClasses[classes[j]] + 1 || 1;
        }
    }
}
然后显示我们的结果

        if (classes[j].length && cssClasses[classes[j]] == null) {
            neverDefined.push(classes[j]);
        }
jsprint("html class usage", htmlClasses);
jsprint("never used in HTML", neverUsed);
jsprint("never defined in CSS", neverDefined);

我认为PhpStorm/WebStorm有一个“查找用法”功能,它应该能够定位它们的使用位置,并且我认为它将为更简单的项目突出显示未使用的类。Visual Studio甚至可能也会这样做。许多CSS验证器可以告诉您所要求的一些功能。您还可以使用Chrome的审核工具来告诉您当前页面中正在使用哪些类。或者,CSS对Firebug的使用。如果您确实想编写一个,请使用HTML解析器来提取类属性、拆分空格和计算发生次数。对于CSS,删除注释,将
\{[^}]*\}
替换为
,匹配
\.(\w+)
,这样您就有了类选择器。然后,您可以找出HTML和CSS中使用了哪些类选择器。我认为PhpStorm/WebStorm有一个“查找用法”功能,它应该能够找到它们的使用位置,我认为它将突出显示未使用的类,以用于更简单的项目。Visual Studio甚至可能也会这样做。许多CSS验证器可以告诉您所要求的一些功能。您还可以使用Chrome的审核工具来告诉您当前页面中正在使用哪些类。或者,CSS对Firebug的使用。如果您确实想编写一个,请使用HTML解析器来提取类属性、拆分空格和计算发生次数。对于CSS,删除注释,将
\{[^}]*\}
替换为
,匹配
\.(\w+)
,这样您就有了类选择器。然后,您可以找出HTML和CSS中使用了哪些类选择器。它们不起作用。为什么它说
a
在不起作用时被使用过一次。为什么说
a
只使用过一次,而不是:/