2012-04-26 64 views
0

我有一個Web程序,它可以改變樣式表(不要問),我需要獲得使用jQuery一類的background-color屬性值得到一個樣式表的背景色。 該類如下所示,但每個樣式表都將具有不同的顏色。你如何使用jQuery

DIV.row.error DIV.field INPUT.input場

{ 背景:#fbdad8; border:1px#ef​​4035 solid; -webkit-border-radius:0.3em; -moz-border-radius:0.3em; -o-border-radius:0.3em; border-radius:0.3em; }

我以前使用的代碼試過,但它始終是白色的,任何想法?

 var checked = $('#<%=chkTermsAgreed.ClientID %>').attr('checked'); 
     var toChange = $('#<%=lblTermsAgreed.ClientID %>') 

     if (!checked) { 

      var bgColor = $('<div class=\"row error\"><input class=\"input-field\"/></div>').hide().appendTo("body"); 
      bgColor = bgColor.find('.input-field'); 
      toChange.css('background-color', bgColor.css('background-color')); 
      bgColor.remove(); 
     } 
+0

通過樣式表,你說的是訪問與'document.styleSheets'外部樣式表,和解析外部文件來獲得一個CSS值,或者是你談論的已經應用到可與常規來得到元素的樣式jQuery的css()函數? – adeneo 2012-04-26 14:08:50

+0

無論給我什麼值#fbdad8從例子。我會認爲在dom中創建類比解析外部樣式表更有效。另一個要補充的問題是,我不知道樣式表的名稱,因爲它是從服務器端處理和抽出的。 – Podge 2012-04-26 14:12:56

+0

你不必解析它們:它們已經被瀏覽器解析過了,你不需要知道它們的名字(見下面的答案)。 – 2012-04-26 14:19:10

回答

2

唯一的解決辦法我看到能夠獲得背景色,即使沒有之類的元素存在被讀取樣式表中的JS。

好消息是,他們是可瀏覽的對象,它的高效閱讀他們,因爲他們還正在解析。

您可以依次遍歷例如像這一切的規則來找到你的背景色:

for (var i=0; i<document.styleSheets.length; i++) { 
     var styleSheet = document.styleSheets[i]; 
     var cssRules = styleSheet.rules; // chrome, IE 
     if (!cssRules) cssRules = styleSheet.cssRules; // firefox 
     for (var j=0; j<cssRules.length; j++) { 
      var rule = cssRules[j]; 
      console.log(styleSheet.href, rule); 
      if (rule.selectorText=="DIV.row.error DIV.field INPUT.input-field") { 
       console.log('found it : ', rule.style.getPropertyValue('background-color')); 
      } 
     } 
    } 
} 
+0

謝謝,工作完美 – Podge 2012-04-26 14:37:08

0

據我瞭解你正在試圖獲得$('div.row.error input[class="input-field"]')類的背景顏色樣式。

  • 選擇就足夠了,而不空間
  • 標記名稱可以用選擇一個元素通過標籤屬性[屬性=「值」:當你明確你想要得到什麼這個問題的解決本身]選擇器
  • 如果您在寫入主選擇器的同時有足夠的空間並輸入新的選擇器,你找到子選擇器的前者。
  • 如果您選擇一個元素或一組您可以更改或其中的任意屬性的類。

現在,讓我們的代碼。 這裏是我的建議:

var checked = $('#<%=chkTermsAgreed.ClientID %>').attr('checked'); 
var toChange = $('#<%=lblTermsAgreed.ClientID %>'); 
var source = $('div.row.error input[class="input-field"]'); 

if (!checked) { 
    toChange.css('background-color', source.css('background-color')); 
} 

我試着檢查選擇。有用。 希望這有助於。 乾杯。