объект style в IE8
В IE8 нельзя поменять css-свойства через объект style, если они не заданы inline'во:
<div id="test">...контент...</div>
<script>
var div = document.getElementById("test");
try {
div.style.height = 500 + "px";
}
catch(e) {
div.setAttribute("style", "height:500px");
</script>
Из-за этого изменение высоты через style выдаёт ошибку(предупреждение) в IE8 в строке состояния, но при этом это не фатал еррор, то есть исполнение кода продолжается. Пробую через try-catch изменить высоту через setAttribute, но почему-то не хочет работать. Как можно решить эту проблему? |
Если добавить в конце нехватающую фигурную скобку, то в IE11 в режиме эмуляции IE8 ваш пример прекрасно работает
|
Цитата:
Объект currentStyle, через который получают значения css-свойств в IE8, возвращает, в отличии от getComputedStyle, не вычисленное значение блока, а то которое было прописано в стилях. Если в стилях его нет, то он возвращает строку "auto". У меня у блока высота в стилях не прописана, то есть она формируется его содержимым, а вычисленное значение данной высоты нужно получить для организации анимированного hide. Если он будет возвращать "auto", а не число, то в алгоритме получится NaN, что приведёт к тому, что анимация работать не будет. Посему вопрос моей проблемы таков: как получить вычисленное (фактическое значение) свойства в IE8, если оно формируется содержимым, а не задаётся вручную в стилях? Вот пример кода:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<script>
window.onload = function () {
var elem = document.getElementById("parent");
document.getElementById("output").innerHTML = getStyle(elem).height;
};
function getStyle(elem) {
var style = window.getComputedStyle ? getComputedStyle(elem, null) : elem.currentStyle;
return style;
}
</script>
<style>
#parent {
border: 1px solid gray;
background-color: #f6f6f6;
border-radius: 5px;
width: 80%;
/*height НЕ ЗАДАНА, А ФОРМИРУЕТСЯ СОДЕРЖИМЫМ*/
}
</style>
</head>
<body>
<p id="output">тут будет высота блока</p>
<div id="parent">
<div style="height: 100px; width: 100px;">fgdfgdfg</div>
<div style="height: 100px; width: 100px;">fgdfgfdg</div>
</div>
</body>
</html>
Здесь парсится в параграф не значение вычисленной высоты, как это делают IE9 и прочие браузеры, поддерживающие getComputerStyle, а строку "auto". Надеюсь, что нормально объяснил суть своей проблемы. |
Для получение текущей высоты следует использовать offsetHeight.
У такого элемента нет никакой css высоты, потому auto - это верное значение. currentStyle служит для получения актуального css для элемента, а не вычислений. getComputedStyle просто идёт на поводу у говнокодеров(что видно из названия), как обычно. |
Aetae,
спасибо. именно это и нужно было. |
| Часовой пояс GMT +3, время: 09:11. |