0

所以我有一个 CSS 选择器的 Javascript 数组:

array is like the following: '.header', '#footer', '#nav', etc

我还有一个 div 包含我的网站 CSS 作为文本(12,000 行长):

<div id="all">
#nav
 {
   border: 1px solid;
   color: black;
 }
 #footer
 {
   display: block;
 }
 </div>

我需要从数组中取出每个选择器并在 $('#all') 中匹配它,删除从选择器开始到结束括号的所有内容。

IE

// for each from the array
$('#all').find($(this));
// removes everything from selector to its end bracket

任何人都可以建议吗?这是删除未使用的站点 CSS。我被困了一段时间。赞赏!

4

1 回答 1

1

更新:添加了调试模式输入输出

好吧,我猜你有一堆 CSS,你想删除一些规则。让我假设这些:

  1. 每行只有一个选择器。
  2. 每行都以该选择器开头。
  3. 每一行都有一个完整的规则。IE,selector {property: value;}

如果第三个选项不成功,有很多CSS 压缩器,你可以使用它们来制作这个 CSS:

#footer
{
  display: block;
}

进入:

#footer { display: block; }

现在,一旦您将其保存在文本文件中,您就可以使用 PHP 或一些好的编程语言进行操作。我不推荐客户端之一。假设您有 PHP,并且这里有一组规则:

#nav { border: 1px solid; color: black; }
#footer { display: block; }

你有你的数组:

$remove = array('.header', '#footer', '#nav');

你可以使用这样的东西:

<pre><?php
$debug = false;
$rules[] = ".header { border: 1px solid; color: black; }";
$rules[] = "#nav { border: 1px solid; color: black; }";
$rules[] = "#footer { display: block; }";
$rules[] = "#header { border: 1px solid; color: black; }";
$rules[] = ".nav { border: 1px solid; color: black; }";
$rules[] = ".footer { display: block; }";
$remove = array('.header', '#footer', '#nav');
$final = array();
foreach ($rules as $rule)
{
    if ($debug) echo "Debug: ", var_dump(strpos($rule, " ")) . "\n";
    if ($debug) echo "Debug: ", var_dump(substr($rule, 0, strpos($rule, " "))) . "\n";
    if ($debug) echo "Debug: ", var_dump(in_array(substr($rule, 0, strpos($rule, " ")), $remove)) . "\n";
    if ($debug) echo "---\n";
    if ( !in_array(substr($rule, 0, strpos($rule, " ")), $remove) )
        $final[] = $rule;
}
echo implode("\n", $final);
?></pre>

上面的脚本包括一个调试。如果设置$debug为 true,您可以看到正在检查的不同内容。

对此的输入是:

.header { border: 1px solid; color: black; }
#nav { border: 1px solid; color: black; }
#footer { display: block; }
#header { border: 1px solid; color: black; }
.nav { border: 1px solid; color: black; }
.footer { display: block; }

输出是:

#header { border: 1px solid; color: black; }
.nav { border: 1px solid; color: black; }
.footer { display: block; }

小提琴: http: //phpfiddle.org/main/code/ehd-z4j

于 2013-03-07T13:58:47.697 回答