получение ширины элемента без заполнения в Internet Explorer

#javascript #mootools

#javascript #mootools

Вопрос:

Я хочу, чтобы изображения на моем сайте соответствовали размеру содержащего их элемента, поэтому у меня есть это:

 if (userHasMicrositePhoto) {
    var width = $('micrositePhotoDiv').getComputedSize().width;
    $('micrositePhoto').src = "flash/userImage.ashx?type=micrositePhotoamp;id="   userId   "amp;width="   width;
}
  

Мой файл-обработчик UserImage.ashx возвращает изображение, заданное идентификатором, масштабированное до ширины, заданной в качестве параметра.

Это отлично работает в firefox, Chrome amp; co, но не работает в Internet Explorer — возвращаемое изображение слишком большое. Я думаю, это связано с тем, что .getComputedSize().width сообщает ширину, которая включает размер заполнения (но на границе или полях) в Internet Explorer, но возвращает только полезную область в других браузерах. В результате ширина, заданная Internet Explorer, слишком велика.

Я не могу найти никаких других доступных полей .getComputedSize() , которые позволили бы мне найти «фактическую» ширину в Internet Explorer. Я попытался использовать .getComputedStyle() , чтобы получить заполнение, чтобы я мог вычесть его из общей ширины, но это возвращает строку, и я оформляю micrositePhotoDiv элемент как padding: 0.75em , так что это не работает.

Что мне нужно сделать, чтобы получить правильную ширину в Internet Explorer?

Комментарии:

1. still..no ответьте здесь на эту загадку.

Ответ №1:

jQuery width() делает именно это (см. Исходный код jQuery).

Как вы видели, обычно getComputedStyle возвращает ширину в пикселях, поэтому вы часто можете это сделать (за исключением старого IE):

 var width = parseFloat(window.getComputedStyle(elem).width);
  

Ответ №2:

Вы можете сделать отступ 0, но проверка вычисленных стилей на размеры и позиции часто вызывает ошибки, и их трудно согласовать с браузерами acreoss.

Вместо этого используйте offsetWidth или clientWidth во всех браузерах.

Комментарии:

1. Я не могу действительно не устанавливать отступы для этого элемента, а offsetWidth и clientWidth сообщают о неправильном (большем) размере как в firefox, так и в IE. Нет ли способа обойти это?

2. «Это не те ответы, которые вы ищете»