2010-11-09 37 views
5

Tôi đang sử dụng YUI và cần có chiều rộng thực của phần tử. Chiều rộng của một phần tử có thể được xác định như sau.YUI - Nhận chiều rộng phần tử đúng?

width + border-left + border-right + padding-left + padding-right + margin-left + margin-right.

Dưới đây là những gì tôi đã đưa ra. Nó xuất hiện để được làm việc. Tôi đã tự hỏi nếu đây là cách tốt nhất để đi về việc xác định điều này hoặc là có một cách hiệu quả hơn?

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

Trả lời nhanh: truy cập quircksmode.org, họ giải quyết vấn đề trình duyệt chéo có – Dan

Trả lời

3

Có một tài sản offsetWidth trả lại chính xác những gì bạn muốn.

+0

offsetWidth không bao gồm giá trị ký quỹ. – wpjmurray

+0

lề không phải là một phần của một yếu tố, phải không? –

+1

Không, không phải. Tôi đoán 'offsetWidth' (mà chỉ bao gồm padding + border) không chính xác đáp ứng các thông số kỹ thuật của OP nhưng nó đã đáp ứng nhu cầu của mình. – casablanca

Các vấn đề liên quan