更改CSS文件时元素样式不更新

时间:2012-08-10 08:17:43

标签: css

所以我有2个css文件 - light.css和dark.css。 我在页面上有一个按钮,可以在这两个css文件之间切换<link>元素的'href'属性。

现在,我有一个<div>默认情况下从light.css获取其背景样式。在将'href'属性更改为'dark.css'时,div不会采用dark.css中提供的新样式代码...

任何想法为什么?

== 编辑:添加了代码段...

JS改变<link>

var nightMode = false;
var theme = document.querySelector('#theme');
// Where <link id="theme" style="text/css" rel="stylesheet" href="light.css">

function toggleNight()
{
    if (!nightMode)
    {
        setTimeout("theme.setAttribute('href', '_css/dark.css')", 400);
        nightMode = true;
    }
    else
    {
        setTimeout("theme.setAttribute('href', '_css/light.css')", 400);
        nightMode = false;  
    }
}

除此之外,CSS文件如下所示:

// light.css
div{background:#ddd;}

// dark.css
div{background:#333;}

2 个答案:

答案 0 :(得分:1)

我从这个网站改变了一点来源:Changing external CSS file with Javascript

我认为这是您希望执行此操作的代码:

<!DOCTYPE html>
<html>
  <head>
    <title>Changing CSS extern file using only JavaScript</title>
    <link id="changeCSS" rel="stylesheet" type="text/css" href="positive.css"/>
    <script type="text/javascript">
      function changeCSS() {

        var oldlink = document.getElementById("changeCSS");
        var cssFile;

        if(oldlink.getAttribute('href') === 'positive.css') {
          cssFile = 'negative.css';
        }
        else {
          cssFile = 'positive.css';
        }

        var newlink = document.createElement("link");
        newlink.setAttribute("id", "changeCSS");
        newlink.setAttribute("rel", "stylesheet");
        newlink.setAttribute("type", "text/css");
        newlink.setAttribute("href", cssFile);

        document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);
      }
    </script>
  </head>
  <body>
    <button onclick="changeCSS();">change</button>
    <div class="box">Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</div>
  </body>
</html>

我希望这就是你所寻求的。如果您不理解代码,请询问。

答案 1 :(得分:0)

您的jQuery / javascript代码显然是错误的,尝试类似:

$('button').click(function(){
  if ($('link[href*="temp1"]').length > 0)
      $("link").attr('href',"http://ajthomas.co.uk/temp2.css");
  else
      $("link").attr('href',"http://ajthomas.co.uk/temp1.css");
});

并且这是一个小提琴 - http://jsfiddle.net/Xtjv2/

<强>更新

只是为了排除它,尝试改变你的CSS:

// light.css
div{background:#ddd;}

// dark.css
div{background:#333;}

要:

// light.css
div{background-color:#ddd;}

// dark.css
div{background-color:#333;}