2012-10-26 32 views
6

我想要一個由開發人員指定的div元素的寬度。 意思是如果你寫$('body').width(),它會提供你在px的寬度,無論你是否指定。我怎樣才能得到div的寬度,這是用CSS編寫的

我需要在CSS/JavaScript中指定的div的寬度,但不是由jQuery計算的(實際上沒有指定但是被繼承)。

如果未指定寬度,則需要知道。

+0

$(「body」)。css(「width」); – Bruno

+0

@布魯諾,但如果我沒有指定任何寬度的身體,其採取寬度browser.I需要知道寬度是寫入元素(這裏身體)或其繼承。 – Johnny

+0

@布魯諾,如果你寫回答問題,你會更快地提高你的聲望。 –

回答

2

下面將循環的代碼通過所有的樣式以及匹配元素的樣式屬性。該函數將返回一個寬度數組。

function getCSSWidths(id) { 

    var stylesheets = document.styleSheets; 
    var widths = []; 
    var styleWidth; 

    // loop through each stylesheet 
    $.each(stylesheets, function(i, sheet) { 

     var len = (sheet.rules.length || sheet.cssRules.length); 
     var rules = sheet.rules || sheet.cssRules; 

     // loop through rules 
     for (var i=0; i < len; i++) { 

      var rule = rules[i]; 

      // if width is specified in css add to widths array 
      if (rule.selectorText.toLowerCase() == "#" + id.toLowerCase()) { 
       widths.push(rule.style.getPropertyValue("width")); 
      } 
     } 
    }); 

    var el = document.getElementById(id); 

    // get width specified in the html style attribute 
    if(el && el.style && el.style.width) { 
     widths.push(el.style.width); 
    } 

    return widths; 
} 

getCSSWidths("test"); 

小提琴here

這裏有一個問題,我可以看到,雖然多重選擇器可以在selectorText即

#id1, #id2, .class1 { 
    // properties 
} 

在這種情況下,ID傳遞作爲一個參數指定將不匹配selectorText屬性。也許有人可以想出一個正則表達式,將匹配指定的ID :)

+0

這是最接近的答案,但仍不完全...... :-) – Johnny

0
document.getElementById('divid').style.width 
1

對於JavaScript的指定的寬度,你可以試試這個:

document.getElementById("myDivElement").style.width

如果上面返回一個空字符串,這意味着它沒有指定通過Javascript。

至於通過CSS指定的規則,發現該元素的類名(多個),然後該類別中指定的規則:

var className = document.getElementById("myDivElement").className;

變種cssWidth = getWidthFromClassname(類名);

現在你需要定義getWidthFromClassname

function getWidthFromClassname(className) 
{ 
    var reqWidth; 
    var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules 
    for(var x=0;x<classes.length;x++) { 
     if(classes[x].selectorText==className) { 
      reqWidth = classes[x].style.getPropertyValue("width"); 
      break; 
     } 
    } 

    return reqWidth; 
} 
+0

如果寬度是繼承? – Johnny

+0

這使事情變得複雜。也許你可以迭代父元素並找到它們的width/css規則,並與元素的offsetWidth進行比較以確定它的寬度是否被繼承(如果CSS規則指定的寬度等於offsetWidth,則可以得出結論:寬度是遺傳)。 –

+0

我這樣做,但過程非常緩慢,不全面,也未優化。 – Johnny

相關問題