2010-10-05 49 views
4

很明顯,它可以做到Firebug做的,但我不確定他們是否在CSSDeclarations上做了很多處理,或者DOM中有什麼東西丟失,但我想抓住元素或樣式表的TYPED風格,而不是DOM似乎要回饋的cssText。Javascript:獲取輸入的CSS值不是計算值

一個例子就是邊框。如果我的元素有邊界:1px的固體#000,在DOM給我回

border-top-width:1px; 
border-right-width-value:; 
border-right-width-ltr-source:; 
border-right-width-rtl-source:; 
border-bottom-width:1px; 
border-left-width-value:; 
etc..... 

我真正想要的背面是什麼我輸入,這是邊界:1px的固體#000。

如果有人對這方面有任何想法,將不勝感激。

以下是CSS的DOM2規範:http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule這就是我不知道我是否錯過了某些東西,如果我應該在別處尋找的地方。

下面是我寫的代碼,似乎工作正常,但就像我說的,現在它只是回饋瀏覽器呈現的樣式和計算的樣式。不需要看代碼。我只是在尋找整體建議。我剛剛發佈的代碼來幫助別人,如果他們尋找的東西下手....

bg.fn.cssNavigator = function(){ 
var el = bg(this)[0]; //Only take first element. 
var context = bg(this).context; //What document are we looking at? 
if(!document.getElementById('plugins-bg_css_navigator-wrapper')){ 
    jQuery("body").append('<div id="plugins-bg_css_navigator-wrapper"><div id="plugins-bg_css_navigator-css"></div></div>'); 
} 
var t = ''; 
t = t+'<div>Inline Style</div><div>'; 
if(el.style){ 
    var els = el.style; 
    for(var i=0; i<els.length; i++){ 
     var s = els[i]; 
     t = t+s+':' 
     t = t+window.getComputedStyle(el, null).getPropertyValue(s)+';<br />';  } 
} 
t = t+'</div>'; 
t = t+'<div>Computed Style</div><div>'; 
var cs = window.getComputedStyle(el, null); 
for(var i = 0; i<cs.length; i++){ 
    //if(typeof cs[i] === "function"){ break; } 
    t = t+cs[i]+':'+cs.getPropertyValue(cs[i])+'<br />';  
} 
t = t+'</div>'; 
var ssc = context.styleSheets; 
for(var i in ssc){ 
    var isTab = false; 
    if(undefined !== jQuery(ssc[i].ownerNode).attr("href")){ 
     t = t+'<div>'+jQuery(ssc[i].ownerNode).attr("href")+'</div>'; 
     isTab = true; 
    }else if(undefined !== ssc[i].ownerNode){ 
     t = t+'<div>Current File</div>'; 
     isTab = true; 
    } 
    if(isTab){ 
     t = t+'<div stylesheet="'+i+'">'; 
     try{ 
      var sscr = ssc[i].cssRules; 
      for(var j in sscr){ 
       if(undefined !== ssc[i].cssRules[j].cssText){ 
        t = t+ssc[i].cssRules[j].cssText+'<br />'; 
       } 
      } 
     //If we get an error, then all the stylesheets are not loaded, let's exit and try again in 100 milliseconds 
     }catch(e){ setTimeout(function(){ bg(el, context).cssNavigator(); }, 100); return false; } 
     t = t+'</div>'; 
    } 
} 
jQuery("#plugins-bg_css_navigator-css").html(t); 
}; 

編輯#####################其實,我誤解了Firebug。看起來,Firefox的實際插件似乎在處理這些東西方面做得更好,但如果您使用的是Firebug Lite,則只需獲取渲染樣式。

回答

1

我確實找到了我正在尋找的答案。

cssText是我一直在尋找的。這裏指出:http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration

它不工作的原因是因爲我在頁面加載時嘗試它,但它在實際呈現發生之前被解僱,所以它返回undefined。

我正在做一些重大的修改,並在頁面完成加載完成後嘗試它,並顯示出來。

耶!

+1

這是'style'屬性,而不是寫在CSS文件中的內容。 – 2013-10-16 13:29:44