2010-11-09 14 views
5

Używam YUI i potrzebuję uzyskać prawdziwą szerokość elementu. Szerokość elementu można określić w następujący sposób.YUI - Czy szerokość elementu jest prawdziwa?

szerokość + border-left + border-right + padding-left + padding-right + margin-left + margin-right.

Oto co wymyśliłem. Wygląda na to, że działa. Właśnie zastanawiałem się czy to jest najlepszy sposób by pójść o ustalaniu tego albo jest tam tam bardziej skuteczny sposób?

YUI().use('node', function(Y) { 
    var node = Y.one('#nav'); 
    var nodeWidth = trueElementWidth(node); 
    alert(nodeWidth); 
}); 

function trueElementWidth(el) { 
    var width = 0; 
    var attributes = ['border-left', 'border-right', 'padding-left', 'padding-right', 'width', 'margin-right', 'margin-left']; 
    for(var i=0; i < attributes.length; i++) { 
     width = width + removePx(el.getComputedStyle(attributes[i])); 
    } 
    return width; 
} 

function removePx(el) { 
    el = el.toString(); 
    length = el.length - 2; 
    elDimension = parseInt(el.substring(0, length)); 
    return isNaN(elDimension) ? 0 : elDimension; 
} 
+0

Szybka odpowiedź: przejdź do quircksmode.org, rozwiązują problem z przeglądarką krzyżową – Dan

Odpowiedz

3

Istnieje właściwość offsetWidth, która zwraca dokładnie to, co chcesz.

+0

offsetWidth nie zawiera wartości marginesów. – wpjmurray

+0

marża nie jest częścią elementu, czyż nie? –

+1

Nie, nie jest. Przypuszczam, że "offsetWidth" (która zawiera tylko dopełnienie + obramowanie) nie spełnia dokładnie specyfikacji OP, ale spełniła jego potrzeby. – casablanca

Powiązane problemy