Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2010, 07:03
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Проблема добавления <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 = '&nbsp;\x3Cstyle type="text/css"\x3E.' + className + ' { display: none; }\x3C/style\x3E';
document.body.appendChild(div);


Полагаю, что изобрел велосипед. Поэтому задаюсь вопросом -- а есть ли другие решения, более элегантные?
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2010, 08:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

посмотри тут
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2010, 09:20
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Спасибо. Это действительно это более элегантное решение - "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
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2010, 14:31
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Чем это элегантнее решение с кучей проверок?

function parse(html) {
    var node = document.createElement("div");
    node.innerHTML = html;
    return node.firstChild;
}

document.body.appendChild(parse("<style>…</style>"));
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2010, 21:46
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Элегантность заключается в отсутствии лишнего элемента внутри тела документа. Я абсолютно с Вами согласен, что пример с оберткой лаконичен.

Кстати Ваш пример, хоть и похож на мой, не добавит новую стилевую таблицу в МСИЕ.
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2010, 22:34
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Угу… фокус, как с инпутами, не удался.

Ну тогда можно обойтись вообще без создания элемента <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>
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2010, 11:06
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от Octane
Ну тогда можно обойтись вообще без создания элемента <style>
Вы не поняли. Надо именно добавить тег. В МСИЕ innerHTML не работает для этого тега. А вот об addRule вместо insertRule, увы, не догадался. Спасибо.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47