JavaScript для вычисления максимальная ширина и высота для вложенных элементов HTML


Я написал следующий код, чтобы дать HTML-элемент максимальная ширина/высота в Родительском контейнере. Я думаю, что решать вопросы модели, но мне интересно, если кто-то может увидеть проблемы и недостатки.

Существуют ли другие решения там, что достичь этого? Я хочу убедиться, что я не изобретать колесо.

function heightBuffer(control) {
    return parseInt((control.outerHeight(true)) - control.height());
}

function widthBuffer(control) {
    return parseInt((control.outerWidth(true)) - parseInt(control.width()));
}

function MaxHeightInParent(control, minHeight, controlHeightsToSubtract) {
    var h = parseInt(control.parent().height()) - heightBuffer(control);
    if (controlHeightsToSubtract != null)
        $.each(controlHeightsToSubtract, function(index, value) {
            h = h - parseInt(value.outerHeight(true));
        });

    if (minHeight != null && h < minHeight) h = minHeight;
    control.height(0);
    control.css('min-height', h);
}

function MaxWidthInParent(control, minWidth, controlWidthsToSubtract) {
    var w = parseInt(control.parent().width()) - widthBuffer(control);
    if (controlWidthsToSubtract != null)
        $.each(controlWidthsToSubtract, function(index, value) {
            w = w - parseInt(value.outerWidth(true));
        });
    if (minWidth != null && w < minWidth) w = minWidth;
    control.width(0);
    control.css('min-width', w);
}

Примечание controlHeightsToSubtract / controlWidthsToSubtract, если вы хотите передать массив элементов управления, которые разделяют содержащий элемент с элементом, который вы пытаетесь увеличить в высоту/ширину.



1681
2
задан 16 августа 2011 в 01:08 Источник Поделиться
Комментарии
1 ответ

Что

parseInt((control.outerHeight(true)) - control.height());

предполагалось достичь?

Результат - всегда будет рядом, так что это делает преобразования числа в строку и обратно в ряд. Это может только потерять точность и тратить время.

Аналогичным образом, использование parseInt на первый аргумент тоже отпадает

parseInt(control.parent().height()) - heightBuffer(control)

так

"4" - 1 === 3

По сути, автоматическое преобразование, что - ли лучше, чем то, что сделано parseInt с parseInt возвращается к восьмеричные на некоторые толкователи, но не другие.

"10"             - 1 === 9
parseInt("10") - 1 === 9
"0x10" - 1 === 15
parseInt("0x10") - 1 === 15
"010" - 1 // throws reliably
parseInt("010") - 1 === 7 // on some and 9 on others

так что я бы избавиться от всех видов использования parseInt качестве операнда -.

Вы, кажется, установка мин-высота , но метод называется значение maxheight. Что смущает меня.

Когда вы изменить CSS

control.css('min-height', h)

вы, возможно, захотите, чтобы указать, как

control.css('min-height', h + "px")

Я не уверен, как вы занимаетесь ширина полей и границ на контроль. Это важно для вас?

2
ответ дан 16 августа 2011 в 04:08 Источник Поделиться