2016-08-20 38 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!我已經更新了我的答案,向您展示了動態添加樣式的兩種可能方式!我沒有這樣想過,希望不會太晚! –