Проблема добавления <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, время: 10:55. |