Проблема добавления <STYLE> в MSIE
Обнаружил интересную особенность в MSIE
Этот код не работает в MSIE и выдает сообщение Unknown runtime error в строке 3. Не имеет значения, во что будет установлено style.innerHTML. С другими браузерами (в наличии ФФ, Хром) проблем нет. var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.' + className + ' { display: none; }'; document.body.appendChild(style); Нашел обходное решение -- работает во всех имеющихся браузерах. var div = document.createElement('div'); div.className = className; div.innerHTML = ' \x3Cstyle type="text/css"\x3E.' + className + ' { display: none; }\x3C/style\x3E'; document.body.appendChild(div); Полагаю, что изобрел велосипед. Поэтому задаюсь вопросом -- а есть ли другие решения, более элегантные? |
|
Спасибо. Это действительно это более элегантное решение - "DOM через внешний JavaScript"
var style = document.createElement('style'); style.type = 'text/css'; var css = '.' + className + ' { display: none; }'; if ( style.styleSheet ) { style.styleSheet.cssText = css; } else { if ( style.innerText == '' ) { style.innerText = css; } else { style.innerHTML = css; } } document.getElementsByTagName('head')[0].appendChild(style); Эксперименты показали, что каждый браузер использует разные свойства FF - innerHTML IE - styleSheet.cssText Chrome (SRWare Iron) - innerText |
Чем это элегантнее решение с кучей проверок?
function parse(html) { var node = document.createElement("div"); node.innerHTML = html; return node.firstChild; } document.body.appendChild(parse("<style>…</style>")); |
Элегантность заключается в отсутствии лишнего элемента внутри тела документа. Я абсолютно с Вами согласен, что пример с оберткой лаконичен.
Кстати Ваш пример, хоть и похож на мой, не добавит новую стилевую таблицу в МСИЕ. |
Угу… фокус, как с инпутами, не удался.
Ну тогда можно обойтись вообще без создания элемента <style> <!DOCTYPE html> <meta charset="UTF-8"> <title>Test</title> <style></style> <div>test</div> <script> var stylesheet = document.styleSheets[0]; if (stylesheet.insertRule) { stylesheet.insertRule("div{color:#f00}", stylesheet.cssRules.length); } else { stylesheet.addRule("div", "color:#f00", -1); } </script> |
Цитата:
|
Часовой пояс GMT +3, время: 18:10. |