Я знаю, что это старая тема, но я искал решение для динамической вставки стилей CSS, которое работает со всеми распространенными / основными браузерами. Я хочу поделиться своим решением с вами. Решение Дэвида не работает хорошо (извините). Я создал всплывающую подсказку класса javascript / jQuery, которая может работать, например, со встроенными стилями, но также может работать со стилями в стиле CSS. (offtopic: также класс может автоматически выравнивать всплывающие подсказки, как всплывающие подсказки по умолчанию).
Может быть, вам интересно, какие преимущества дает вставка CSS, как в примере выше. Что ж, вам не нужен дополнительный CSS-файл со стилями, и вы можете динамически добавлять стили из скрипта, а при работе с изображениями вы можете динамически изменять путь к изображениям, если хотите (поэтому вам не нужно менять какие-либо файл). Также вы можете вставлять стили НАД другими таблицами стилей / правилами стилей, а применяемые правила стилей можно изменить в других таблицах стилей ниже (это невозможно при использовании встроенных стилей или при размещении вставленных правил НИЖЕ любой существующей таблицы стилей).
Эта функция работает с Opera / Firefox / IE7 / IE8 / IE9 / Chrome / Safari (без взлома!):
function addHtmlStyles( sCss, oBefore )
{
var oHead = document.getElementsByTagName('head')[0];
if( !oHead || oHead == null )
{ return false; }
var bResult = false,
oStyle = document.createElement('style');
oStyle.type = 'text/css';
oStyle.rel = 'stylesheet';
oStyle.media = 'screen';
if( typeof oStyle.styleSheet == 'object' )
{ // IE route (and opera)
try{ oStyle.styleSheet.cssText = sCss; bResult = true; }
catch(e) {}
}
else {
// Mozilla route
try{ oStyle.innerHTML = sCss; bResult = true; }
catch(e) {};
if( !bResult )
{
// Webkit route
try{ oStyle.innerText = sCss; bResult = true; }
catch(e) {};
}
}
if( bResult )
{
try
{
if( typeof oBefore == 'object' )
{ oHead.insertBefore(oStyle, oBefore ); }
else { oHead.appendChild(oStyle); }
}
catch(e) { bResult = false; }
}
return bResult;
}
Возвращает истину, когда все в порядке, или ложь в случае неудачи. Например:
var sCss = '#tooltip {background:"#FF0000";}';
// get first stylesheet with jQuery, we don't use $('head') because it not always working
// If there is no stylesheet available, it will be added at the end of the head tag.
var oHead = $(document.getElementsByTagName('head')[0]),
oFirst = oHead.find('[rel=stylesheet]').get(0);
if( addHtmlStyles( sCss, oFirst ))
{ alert( 'OK' ); }
else { alert( 'NOT OK' ); }
Вот и все. Надеюсь, вам понравится решение.
Greetz,
Эрвин Хаантес