Javascript:动态更改CSS文件+;曲奇

Javascript:动态更改CSS文件+;曲奇,javascript,jquery,cookies,jquery-cookie,dynamic-css,Javascript,Jquery,Cookies,Jquery Cookie,Dynamic Css,我想仅使用javascript动态更改使用的CSS文件(),并将更改保存在cookie中 这是一个jQuery版本,可以实现我想要的功能(),但是如何在javascript中实现这一点呢 if($.cookie("css")) { $("link").attr("href",$.cookie("css")); } $(document).ready(function() { $("#nav li a").click(function() { $("link").a

我想仅使用javascript动态更改使用的CSS文件(
),并将更改保存在cookie中

这是一个jQuery版本,可以实现我想要的功能(),但是如何在javascript中实现这一点呢

if($.cookie("css")) {
    $("link").attr("href",$.cookie("css"));
}
$(document).ready(function() {
    $("#nav li a").click(function() {
        $("link").attr("href",$(this).attr('rel'));
        $.cookie("css",$(this).attr('rel'), {expires: 365, path: '/'});
        return false;
    });
});

提前谢谢。

也许这能帮到你

(function() {
    var e = document.createElement('link'); 
    e.href = document.location.protocol + '//example.com/file.css';
    e.type = 'text/css';
    e.rel = 'stylesheet';
    e.media = 'screen';
    document.getElementsByTagName('head')[0].appendChild(e);      
}());

编辑,不带jQuery的完整JavaScript

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

document.addEventListener('DOMContentLoaded',function(){

    if(readCookie('css')){
        var e = document.getElementById('test-css'); // <link href="..." id="test-css"/>
        e.href = readCookie('css'); 
    }

    var element = document.getElementById('change-css'); // <a herf="#" id="change-css" rel="file.css">Click Here</a>
    element.addEventListener('click', function (event) { 
        var e = document.getElementById('test-css');
        e.href = this.rel;
        if(readCookie('css')){  
            eraseCookie('css');     
        }
        createCookie('css',this.rel,365); 
        event.preventDefault(); 
    }, false);
})
函数createCookie(名称、值、天数){
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
var expires=“;expires=“+date.togmString();
}
else var expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
}
函数readCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
阅读:

首先,让我们制作一个示例html布局

<html> <!--#include javascript.js styles.css-->
    <body>
        <span>sometext</span>
        <p>somemoretext</p>
    </body>
</html>
现在是javascript。在我们做任何事情之前,cookies不能存储css信息。我们将使用cookies名称来确定要加载的样式类型。上面的quirksmode资源让我们可以轻松地使用cookie

if(readCookie("newStyle")) {
    // do something
} else {
    // do something else
}
在这种情况下,我们希望更改样式。我们可以使用两种方法:
document.element.style.property
appendChild
和另一个CSS工作表的href。在本例中,我们使用
document.element.style.property

if(readCookie("newStyle")) {
    eraseCookie("newStyle")
    document.getElementsByTagName("span")[0].style.color = "purple"
    document.getElementsByTagName("p")[0].style.color = "pink"
} else {
    createCookie("newStyle",0000,60)
}
现场示例


多次刷新页面以查看不同颜色的单词。

jQuery是JavaScript。您可以通过访问cookies。谢谢。我不想加载jQuery。那么,CSS部分呢?@Pointy,除非它是一个仅HTTP的cookie:)是的,但是jQuery也不能做到!HTTP cookie现在还可以,但另一部分呢?我不想添加CSS文件,但要更改它。那么你能编辑你的帖子吗?谢谢。最后一部分是jquery和javascript的结合?可能需要再编辑一次,但我会检查其他部分。谢谢。+1在这里提供了很好的信息,但与我的问题无关。我想更改CSS文件(href位置),而不是元素的内部样式。谢谢。您不能使用javascript在服务器/客户端更改CSS文件。您要么加载另一个CSS文件,要么在DOM中编辑现有的CSS。如果您需要服务器端脚本,请查看我文章中的PHP.jQuery版本,它完全符合我的要求。我想在单击元素时更改html中外部css文件的href位置。
if(readCookie("newStyle")) {
    eraseCookie("newStyle")
    document.getElementsByTagName("span")[0].style.color = "purple"
    document.getElementsByTagName("p")[0].style.color = "pink"
} else {
    createCookie("newStyle",0000,60)
}