2016-08-20 37 views
0

的速度我读了一大篇:http://www.learningjquery.com/2010/05/now-you-see-me-showhide-performance禁用样式表来增加显示/隐藏的div

我引述其作者:

“为了好玩,我想,”如果有什么,而不是操纵每一个DOM节点和改变的东西,我们只是想与样式表?“那里有速度的改进吗?我的意思是,上面基准测试的方法对于日常使用来说是非常快的,但是如果我想在一个页面上显示和隐藏一个页面上有10,000个节点?如果我可以操作样式表,我可以避免整个开销,让我告诉你,这种方式充满危险

当然,在操作样式表时,会出现跨浏览器问题,因为jQuery没有为您抽象它们。首先,我尝试了解是否可以使用jQuery将CSS样式标签添加为字符串,但在浏览器中得到的结果不一致。然后我尝试使用JavaScript创建样式表节点和类,但是有不同的API,结果太慢而无法证明。最后,我试图以编程的方式尝试这样做,结果我只是在文档的头部写了一个带有类的样式标签。以编程方式创建样式表的速度太慢,但如果它已经存在,那么为它提供一个ID并使用它的disabled属性是微不足道的。

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-1ms。你正在做的唯一的JavaScript是改变一个属性。 “

**我的问题是:我怎么可以创建一个‘special_show’培训班里加入我的div到类,然后实现该类显示他们

喜欢的东西

<style id="special_show">.special_show { display: default; }</style> 

**?

+2

可以重复[可以jquery操作文档的全局css定义?](http://stackoverflow.com/questions/1348741/can-jquery-manipulate-the-global-css-definition-of-the-文件) –

+0

嗨葛瑞格尔,我要的是能够使类“special_show”,并设置我的所有div回显示原来的预期值。我不明白这个问题是如何相似的,但我可能不明白,是网络编程的新手。 –

回答

2

我会做一个笼统的回答,没有字符限制:)

所以,要操纵DOM元素的CSS样式(例如一个(如$(".special_style").each()来应用样式,因为它可以消耗大量的资源,规则捕获的元素越多。

您不能使用removeClass/addClass组合,因为它是DOM操作,您需要使用前一个循环。

这有already been answered和解决方案是使用insertRuleaddRule方法。 请仔细阅读对方的回答,这个话题是重复的。

更新:

This fiddle展示了如何管理动态CSS添加到您的网页! 嗯,这是不是很大,因为它不是外在,但但它可以做你想实现的东西!

$("#special_hide").append(".special_hide { display: none; }");

您可以加载不同的CSS文件$("head").append("<link rel='stylesheet' href='path/to/style.css' type='text/css' />");

除此之外,我不能告诉你哪一个是最好的,有些人会精氨酸,通过添加样式修改头能是,别人会告诉你,内联CSS是错误 ...只要让你的心吧阅读文档像W3C!

+1

非常感谢! –

+0

你好@NathanS!我已经更新了我的答案,向您展示了动态添加样式的两种可能方式!我没有这样想过,希望不会太晚! –