Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   объект style в IE8 (https://javascript.ru/forum/css-html-internet-explorer/50645-obekt-style-v-ie8.html)

mixtape 05.10.2014 21:50

объект 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, но почему-то не хочет работать. Как можно решить эту проблему?

Gvozd 05.10.2014 23:50

Если добавить в конце нехватающую фигурную скобку, то в IE11 в режиме эмуляции IE8 ваш пример прекрасно работает

mixtape 06.10.2014 13:51

Цитата:

Сообщение от Gvozd (Сообщение 333651)
Если добавить в конце нехватающую фигурную скобку, то в 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". Надеюсь, что нормально объяснил суть своей проблемы.

Aetae 06.10.2014 18:50

Для получение текущей высоты следует использовать offsetHeight.
У такого элемента нет никакой css высоты, потому auto - это верное значение. currentStyle служит для получения актуального css для элемента, а не вычислений. getComputedStyle просто идёт на поводу у говнокодеров(что видно из названия), как обычно.

mixtape 06.10.2014 23:01

Aetae,
спасибо. именно это и нужно было.


Часовой пояс GMT +3, время: 08:24.