2013-04-06 39 views
0

我使用的一些功能在運行時鉻,javascript中,getCSSrule使100%的CPU時間

function getCSSRule(ruleName) { 
var stylesheets = document.styleSheets; 
for (var i=0; i < stylesheets.length; i++) { 
    var rules = stylesheets[i].cssRules || stylesheets[i].rules; 
    for (var j=0, rule; rule = rules[j++];) { 
     if (rule.selectorText === '#title') { 
      return rule; 
     } 
    } 
} 
return false; 
} 

獲得特定的CSS規則,並在Ajax回調使用這樣

var r = document.getElementsByClassName('#title')[0]; 
r.style.background = col; 

這讓我的CPU使用率100%。問題是當我嘗試設置顏色,而不是函數本身(?) 任何意見將不勝感激。問題是在Chrome中,在FF中沒有問題,即使在IE6中工作得很好。

簡單來說,這是在Chrom中工作,但具有高CPU使用率和一些其他意想不到的(其他JavaScript)行爲。任何線索?

var r = document.styleSheets[0].cssRules[10]; // acess by hand 

r.style.border = "auto"; // modify something 
+1

那麼,爲什麼你認爲getCSSRule方法有什麼與CPU使用率? – David 2013-04-06 21:03:36

+0

當我在Chrome中使用代碼時,CPU保持在90 ... 100%,我觀察到一些其他意外行爲。在調試時,看起來像修改上面的訪問規則是個問題。 – user1973900 2013-04-06 21:13:00

+0

但代碼工作:)這是煩人的。 – user1973900 2013-04-06 21:13:36

回答

1
function getCSSRule(ruleName) { 
    var stylesheets = document.styleSheets; 
    for (var i=0; i < stylesheets.length; i++) { 
     var rules = stylesheets[i].cssRules || stylesheets[i].rules; 
     for (var j=0, k=rules.length, rule; j < k; rule = rules[j++];) { 
      if (rule.selectorText === '#title') { 
       return rule; 
      } 
     } 
    } 
    return false; 
} 

條件語句中缺少第二for循環。您需要檢查rules.length

+0

好的,我同意,我會立即檢查。但請檢查我的第一篇文章,同樣的情況時,根本不使用該功能! – user1973900 2013-04-06 21:31:29

+1

至於規則數組是緊湊的,而不存在的cssRule是虛假的,他的循環語句是正確的。這種循環風格是循環優化的第一步,也是while循環的途徑。 – lib3d 2013-04-06 21:49:32

+0

@ lib3d dammit!你是對的。 – vsr 2013-04-06 21:52:30

0

拉出我的頭髮後,我發現另一種解決方案,非常簡單,跨瀏覽器。如果有人需要:)

<div id="menu" class="menu"> 
<a href="config.htm">Configuration</a> 
<a href="status.htm">Status</a> 
... 
</div> 

現在在CSS中,有2個「菜單中的」類,一爲ON,另一個用於OFF(只是檢測在線和離線)。 而改變從javacript(按10ms率Ajax回調)的作品完美

if(Offline) 
{ 
    var elem = document.getElementById('menu'); 
elem.className = 'menudis'; 
}