2013-06-02 26 views
0

目標是用jQuery pollyfill css3 nth-child僞類。所以我需要解析css規則,然後用jQuery重新應用它們,以便舊版瀏覽器不直接從css支持nth-child。所以我寫了一些代碼,但我很確定類似的應該已經存在,例如在github上。可能有人已經遇到過這樣的問題?這裏是我的代碼:是否有任何JavaScript庫用於解析jss中使用的css規則?

 // if ie7 or ie8 
     if (!$.support.leadingWhitespace) {   

      var aStyleSheetList = document.styleSheets, 
       aRules = [], 
       current = '', 
       aSelectors = []; 

      for (var i = 0; i < aStyleSheetList.length; i++) { 
       aRules = aStyleSheetList[i].cssRules || aStyleSheetList[i].rules; 
       for (var j = 0; j < aRules.length; j++) { 
        current = aRules[j]; 
        if (current.selectorText && current.selectorText.indexOf('nth-child') !== -1) { 
         aSelectors.push([current.selectorText, current.cssText.substring(current.cssText.indexOf('{') + 1, current.cssText.indexOf('}'))]); 
        } 
       } 
      } 

      var jqCssObject = {}, 
       declarations = [], 
       keyValuePair = []; 

      for (var k = 0; k < aSelectors.length; k++) { 
       declarations = aSelectors[k][1].split(';'); 
       for (var m = 0; m < declarations.length; m++) { 
        keyValuePair = declarations[m].split(':'); 
        jqCssObject[keyValuePair[0]] = keyValuePair[1]; 
       } 
       $(aSelectors[k][0]).css(jqCssObject);     
      } 

     } 
+0

爲什麼你不使用jQuery選擇器?還有http://css3pie.com/ – Blender

+1

是的。但我懶得編輯js文件,每次我給css添加一些n-child。這將是很多代碼。感謝您的CSS鏈接。 – paperstreet7

回答

1

如果你想使用僞選擇在舊的瀏覽器,如nth-child,一個選擇是使用Selectivizr

「Selectivizr是一個JavaScript實用程序,模擬CSS3僞類 和Internet Explorer 6-8中的屬性選擇器。「

正如你已經在使用jQuery,所有你需要做的是包括Selectivizr <script>在你的頁面,你將不得不在舊的瀏覽器不同的僞/屬性選擇器的兼容性。

+0

我可以從cdn動態加載selectivizr到腳本中嗎?我會主動嗎?因爲我以前曾經嘗試過多次使用selectivizr,而且在我看來很難實現它。 – paperstreet7

+1

@ paperstreet7它不應該太難,本教程將幫助 - http://blog.reybango.com/2010/09/08/start-using-css3-pseudo-classes-in-internet-explorer-6- 7-and-8-using-the-selectivizr-javascript-library/ – lifetimes

+0

編號Selectivizr不適合我。正如我所看到的,我不是唯一一個與selectivizr有問題的人。 – paperstreet7

相關問題