3

使用するCSSファイル( )をjavascriptのみ<link href="..." />を使用して動的に変更し、変更をCookieに保存したいと思います。

これは私が望むことを行うjQueryバージョンです(ref)が、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;
    });
});

前もって感謝します。

4

2 に答える 2

5

多分これはあなたを助けるかもしれません。

(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);
})
于 2012-09-01T16:28:43.280 に答える
2

読むhttp ://www.quirksmode.org/js/cookies.html

そしてhttp ://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS

まず、HTMLレイアウトの例を作成しましょう。

<html> <!--#include javascript.js styles.css-->
    <body>
        <span>sometext</span>
        <p>somemoretext</p>
    </body>
</html>

次に、cssレイアウトの例を作成しましょう。

span {
    color: red;
}

p {
    color: blue;
}

body {
    background: black;
}

これがjavascriptです。何かをする前に、Cookieはcss情報を保存できません。ロードするスタイルのタイプを決定するためにCookie名を使用します。上記のquirksmodeリソースを使用すると、Cookieを簡単に使用できます。

if(readCookie("newStyle")) {
    // do something
} else {
    // do something else
}

この場合、スタイルを変更します。2つの方法を使用できます。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)
}

実例:http: //jsfiddle.net/5HGsH/3/

ページを複数回更新して、さまざまな色の単語を表示します。

于 2012-09-01T16:43:15.857 に答える