YUI - получить истинную ширину элемента?

Я использую YUI и мне нужно получить истинную ширину элемента. Ширину элемента можно определить следующим образом.

ширина + граница слева + граница справа + отступы слева + отступы справа + поля слева + поля справа.

Ниже то, что я придумал. Кажется, это работает. Мне просто интересно, это лучший способ определить это или есть более эффективный способ?

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;
}

person JasonS    schedule 09.11.2010    source источник
comment
Быстрый ответ: зайдите на quirksmode.org, там решают проблему кроссбраузерности.   -  person Dan    schedule 14.12.2012


Ответы (1)


Существует свойство offsetWidth, которое возвращает именно то, что вы хотите.

person casablanca    schedule 09.11.2010
comment
offsetWidth не включает значения полей. - person wpjmurray; 27.05.2011
comment
margin не является частью элемента, не так ли? - person Nylon Smile; 15.02.2012
comment
Нет это не так. Я предполагаю, что offsetWidth (который включает только заполнение + граница) не совсем соответствует спецификациям OP, но он удовлетворил его потребности. - person casablanca; 16.02.2012