Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.10.2014, 21:50
Интересующийся
Отправить личное сообщение для mixtape Посмотреть профиль Найти все сообщения от mixtape
 
Регистрация: 19.06.2014
Сообщений: 13

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

Последний раз редактировалось mixtape, 05.10.2014 в 22:12.
Ответить с цитированием
  #2 (permalink)  
Старый 05.10.2014, 23:50
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Если добавить в конце нехватающую фигурную скобку, то в IE11 в режиме эмуляции IE8 ваш пример прекрасно работает
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2014, 13:51
Интересующийся
Отправить личное сообщение для mixtape Посмотреть профиль Найти все сообщения от mixtape
 
Регистрация: 19.06.2014
Сообщений: 13

Сообщение от Gvozd Посмотреть сообщение
Если добавить в конце нехватающую фигурную скобку, то в 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". Надеюсь, что нормально объяснил суть своей проблемы.
Ответить с цитированием
  #4 (permalink)  
Старый 06.10.2014, 18:50
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

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

Последний раз редактировалось Aetae, 06.10.2014 в 18:54.
Ответить с цитированием
  #5 (permalink)  
Старый 06.10.2014, 23:01
Интересующийся
Отправить личное сообщение для mixtape Посмотреть профиль Найти все сообщения от mixtape
 
Регистрация: 19.06.2014
Сообщений: 13

Aetae,
спасибо. именно это и нужно было.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
$.ParseJson() IE8 Artbrass jQuery 2 21.05.2014 17:02
Ищу функцию для canvas, которая будет перемещать мой объект на позицию х,у eko24 Events/DOM/Window 0 12.10.2013 00:33
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
Передать ссылку на объект а не объект возникновения события Blazze Events/DOM/Window 0 11.10.2011 00:45
<= IE8 memory leak, IE9 - fine AbNormy Internet Explorer 1 20.05.2011 19:47