检查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
只使用过一次,而不是:/