Gildas 7 лет назад
Родитель
Сommit
63c364b7fc
1 измененных файлов с 24 добавлено и 14 удалено
  1. 24 14
      lib/single-file/css-minifier.js

+ 24 - 14
lib/single-file/css-minifier.js

@@ -69,23 +69,33 @@ this.cssMinifier = this.stylesMinifier || (() => {
 				getMatchedElements(doc, cssRule.cssRules, ruleMediaInfo, sheetIndex);
 			} else if (cssRule.type == CSSRule.STYLE_RULE) {
 				if (cssRule.selectorText) {
-					const selectors = cssWhat.parse(cssRule.selectorText);
+					let selectors = cssWhat.parse(cssRule.selectorText);
+					let removedSelectors;
 					selectors.forEach((selector, selectorIndex) => {
-						doc.querySelectorAll(cssWhat.stringify([selector])).forEach(element => {
-							let elementInfo;
-							if (mediaInfo.elements.has(element)) {
-								elementInfo = mediaInfo.elements.get(element);
-							} else {
-								elementInfo = [];
-								const elementStyle = element.getAttribute("style");
-								if (elementStyle) {
-									elementInfo.push({ cssStyle: element.style });
+						const matchedElements = doc.querySelectorAll(cssWhat.stringify([selector]));
+						if (matchedElements.length) {
+							matchedElements.forEach(element => {
+								let elementInfo;
+								if (mediaInfo.elements.has(element)) {
+									elementInfo = mediaInfo.elements.get(element);
+								} else {
+									elementInfo = [];
+									const elementStyle = element.getAttribute("style");
+									if (elementStyle) {
+										elementInfo.push({ cssStyle: element.style });
+									}
+									mediaInfo.elements.set(element, elementInfo);
 								}
-								mediaInfo.elements.set(element, elementInfo);
-							}
-							elementInfo.push({ cssRule, specificity: computeSpecificity(selector), selectorIndex, ruleIndex, sheetIndex });
-						});
+								elementInfo.push({ cssRule, specificity: computeSpecificity(selector), selectorIndex, ruleIndex, sheetIndex });
+							});
+						} else {
+							selectors = selectors.filter(s => s != selector);
+							removedSelectors = true;
+						}
 					});
+					if (selectors.length && removedSelectors) {
+						cssRule.selectorText = cssWhat.stringify(selectors);
+					}
 				}
 			}
 		});