2010-11-01 2 views
2

У меня есть функция javascript, которая переключается с двух разных файлов css, которые влияют на мой веб-сайт. Проблема в том, что css только частично применяется с моей функцией, и мне нужно обновить браузер, чтобы получить весь новый стиль.Как обновить стиль страницы после css-переключателя

Вот моя функция:

function switch_style() 
{ 
    var head=document.getElementsByTagName('head')[0]; 

    for (i = 0, link_tag = document.getElementsByTagName("link"); i < link_tag.length ; i++) 
    { 
      if ((link_tag[i].rel.indexOf("stylesheet") != -1) && link_tag[i].title) 
      { 
       if (link_tag[i].title == "normal") 
       { 
        head.removeChild(link_tag[i]);   
       } 
      } 
    } 
    var cssNode = document.createElement('link'); 
    cssNode.type = 'text/css'; 
    cssNode.rel = 'stylesheet'; 
    cssNode.href = '/templates/rhuk_milkyway/css/template_contrast.css'; 
    head.appendChild(cssNode); 
    set_cookie(style_cookie_name, "contrast", style_cookie_duration); 
} 

Как вы можете видеть, я удалить, а затем добавить новый стиль в заголовке страницы.

Есть ли способ обновить стиль?

(Это происходит со всеми браузера)

+0

В конце концов, мне пришлось перезагрузить страницу через javascript, чтобы обновить мой css. – AngeloBad

+0

http://www.kelvinluck.com/assets/jquery/styleswitch/toggle.html – generalhenry

ответ

0

CSS-

<link href="/css/main.css" rel="stylesheet"type="text/css" title="main" media="screen" /> 
<link href="/css/alt1.css" rel="alternate stylesheet" type="text/css" title="alt1" media="screen" /> 

Javascript

function switch_style (title) { 
    var lnks = document.getElementsByTagName('link'); 
    for (var i = lnks.length - 1; i >= 0; i--) { 
    if (lnks[i].getAttribute('rel').indexOf('style')> -1 && lnks[i].getAttribute('title')) { 
     lnks[i].disabled = true; 
     if (lnks[i].getAttribute('title') == title) lnks[i].disabled = false; 
    }}} 
+0

Это решение не работает, потому что атрибут disable отмечен правильно распознанным всем браузером. – AngeloBad

+0

Испытано это на следующих браузерах и платформах Mac OSX 10.5.8- Mozilla 3.6.12, Chrome 7.0.517.41, Safari 5.0 Win XP SP3 -IE8 и это работает для меня. – Philar

+1

http://stackoverflow.com/questions/4064963/why-doesnt-setting-the-disabled-property-of-a-link-tag-via-javascript-work-i/4065089#4065089 – AngeloBad

0

Я может быть видом что-то, но зачем вам нужно переключить таблицы стилей, когда вы можете просто добавьте новый класс в свой элемент html или body?

Плюсы:

  • Быстрее переключения. Вам не нужно ждать, пока ваш новый css будет загружен - альтернативные стили могут быть включены в таблицу стилей .
  • Упрощенный. jQuery.toggleClass (или element.className, если вы не используете jQuery) будет выполнять всю работу.
  • Работы везде.

Con (ы):

  • Вы должны добавить новый класс для всех селекторов в CSS.
+0

потому что стилизация массивная и не написанная мной –

Смежные вопросы