我读了一篇很棒的文章:http://www.learningjquery.com/2010/05/now-you-see-me-showhide-performance
我引用它的作者:
“为了好玩,我想:“如果不操纵每个DOM节点并进行更改,而只是使用样式表就可以了吗?”那里的速度可以提高吗?我的意思是,上面提到的基准测试方法对于日常使用来说足够快了,但是如果我要显示和隐藏一个页面上有10,000个节点该怎么办?仅选择它们会很慢。但是,如果我可以操纵样式表,则可以避免整个开销。让我告诉你这种方式很麻烦危险。
当然,在处理样式表时会有跨浏览器的问题,因为jQuery不会为您抽象它们。首先,我尝试查看是否可以使用jQuery将css类的样式标签附加为字符串,但在浏览器中得到的结果不一致。然后,我尝试使用JavaScript创建样式表节点和类,但是有不同的API,结果证明它太慢了。因此,最后,放弃了以编程方式进行此操作的尝试,我最终只用文件头中的类编写了样式标签。以编程方式创建样式表太慢了,但是如果已经存在,则给它一个ID并使用其disable属性是很简单的。
HTML:
<style id="special_hide">.special_hide { display: none; }</style>
<!-- ... -->
<div class="special_hide">Special hide DIV</div>
然后在javascript中...
JavaScript:
$('#special_hide').attr('disabled, 'true');
和BAM,您仅使用“ special_hide”类显示了所有元素。要再次隐藏它们,只需…
JavaScript:
$('#special_hide').attr('disabled', 'false');
现在它们都被隐藏了。在所有浏览器中,JavaScript的总处理时间为0-1毫秒。您正在执行的唯一JavaScript就是更改属性。 ”
**我的问题是:如何创建一个“ special_show”类,将div添加到该类中,然后启用该类来显示它们?
就像是
<style id="special_show">.special_show { display: default; }</style>
**
最佳答案
我要作一个一般性的回答,没有字符限制:)
因此,您要操作DOM元素(例如divs等)的CSS样式,而不用遍历元素(例如$(".special_style").each()
)来应用样式,因为规则捕获的元素越多,它就会消耗大量资源。
您不能使用removeClass
/ addClass
组合,因为它是DOM操作,您将需要使用上一个循环。
它具有already been answered,解决方案是使用insertRule
和addRule
方法。
请阅读其他答案,该主题重复。
更新:
1 This fiddle显示了如何设法向页面添加动态CSS!
好吧,这不是很好,因为它没有被外部化,但是它可以完成您想实现的目标!$("#special_hide").append(".special_hide { display: none; }");
2您可以加载其他CSS文件$("head").append("<link rel='stylesheet' href='path/to/style.css' type='text/css' />");
除此之外,我无法告诉您哪个是最好的,有些人会建议通过添加样式表来修改头部可能是错误的,其他人会告诉您内联css是错误的...只需通过阅读就可以下定决心像w3c一样的文档!