Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript压缩CSS选择器字符串_Javascript_Jquery_Css - Fatal编程技术网

如何使用javascript压缩CSS选择器字符串

如何使用javascript压缩CSS选择器字符串,javascript,jquery,css,Javascript,Jquery,Css,也许有个图书馆已经在做这个了?我能找到的只是在线工具。我想在javascript中这样做的原因是因为我想知道字符串a>b,a与a>b,a相同。如果我可以将其压缩为CSS,那么所有版本都将以相同的字符串结束 更好地解释我为什么要这么做:我为自己编写了一个jQuery插件来缓存jQuery选择器(这个东西$('div'))。它通过存储一个键值对来工作,其中键是我的选择器字符串,值是找到的DOM元素。这就是为什么我要比较CSS选择器字符串,否则我将存储本质上是同一选择器的不同键。Uglify.js(h

也许有个图书馆已经在做这个了?我能找到的只是在线工具。我想在javascript中这样做的原因是因为我想知道字符串
a>b,a
a>b,a
相同。如果我可以将其压缩为CSS,那么所有版本都将以相同的字符串结束

更好地解释我为什么要这么做:我为自己编写了一个jQuery插件来缓存jQuery选择器(这个东西
$('div')
)。它通过存储一个键值对来工作,其中键是我的选择器字符串,值是找到的DOM元素。这就是为什么我要比较CSS选择器字符串,否则我将存储本质上是同一选择器的不同键。

Uglify.js(https://github.com/mishoo/UglifyJS)可以让您自动压缩CSS。它将删除所有不必要的空白和注释。这应该允许您规范化您想要的任何内容。您需要查看丑陋的源代码,并尝试提取所需的组件


当我在上进行实验时:似乎选择器总是被适当地缩小(尽管使用的是YUI而不是uglifyjs)。唯一剩下的问题是a>b,b和b之间的差异,a>b。为此,我建议首先缩小,然后用“,”进行拆分;然后按字母顺序对数组进行排序;最后重新加入分割阵列。完成后,您可以使用该值作为哈希。

压缩是什么意思?你为什么要压缩选择器?为什么需要在运行时压缩?听起来你实际上是在问是否有方法规范化选择器(或者至少是空白)以进行比较。是吗?@user1689607完全正确。我之所以要这样做,是因为缓存jQuery选择器。所以你想解析CSS文档并规范化这些选择器?或者您正在解析jQuery脚本以规范化任何现有的选择器字符串?因为所需的不是CSS文件的缩小或压缩,而是规范化嵌入JS代码中的CSS选择器,以便两个仅在使用空格等方面不同的选择器字符串,都被认为是相同的。@GregL如果你缩小了一个有效的CSS片段,它不会也正常化吗?如果你有多余的空间,它应该把它们全部删除。在这种情况下,压缩是标准化的。试试a>b,a{background:#000;}vs a>b,a vs a>b,a{}on。所有的变化都会导致相同的结果。没错,这可能比删除空白要好,因为我认为缩小比删除空白更复杂。您能通过编程方式在这样的小字符串上调用Uglify.js吗?仅供参考,我不是落选者。我只是解释为什么我认为你可能被否决了。@GregL谢谢!我为提议的解决方案添加了更多细节。UglifyJS只是javascript。它肯定需要一些修改,但我认为forking-uglify是这里最好的选择,因为它已经在JS中了,并且可能会被移植。如果最终的解决方案足够小,我希望看到将请求拉入jquery。我想知道我们没有考虑什么样的案例。