为jquery样式开关添加cookie

时间:2012-07-09 13:52:26

标签: jquery css cookies styles switch-statement

我只有一个按钮,我想添加功能。当您单击按钮时,站点的样式将更改为高对比度版本(即样式表high_contrast.css将附加到头部)。显然我做了一些错误,因为下面的代码只是切换当前页面的样式,当你导航到另一个页面时,它会切换回默认样式。我可能不应该每次都设置变量highContrast。我想使用查询cookie插件(https://github.com/carhartl/jquery-cookie)来实现这一点,但在这种情况下我并不真正理解如何使用它。

这是HTML

<div id="contrast-btn"><a href="#" rel="css/high-contrast.css">high contrast</a></div>

这是脚本

$(document).ready(function(){
    var highContrast = false;
    $("#contrast-btn a").click(function () {
        if (!(highContrast)) {
            $('head').append('<link rel="stylesheet" href="css/high-contrast.css" type="text/css" id="hc_stylesheet"/>');
            highContrast = true;
        }       
        else {
            // remove the high-contrast style
            $("#hc_stylesheet").remove();
            highContrast = false;
        }
    });
});

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您必须通过cookie获取并设置值:

$(document).ready(function(){
// DRY wrapper function
function appendStyleSheet() {
  $('head').append('<link rel="stylesheet" href="css/high-contrast.css" type="text/css" id="hc_stylesheet"/>'); 
}
// append the style sheet on load if the cookie is set to true
if ($.cookie('high_contrast') == 'true') {
  appendStyleSheet();      
}
$("#contrast-btn a").click(function () {
    if ($.cookie('high_contrast') != 'true') {

        appendStyleSheet();      
        $.cookie('high_contrast', 'true'); // set the cookie to true
    }       
    else {
        // remove the high-contrast style
        $("#hc_stylesheet").remove();
        $.cookie('high_contrast', 'false');
    }
});
});

您可以向Cookie添加过期或网站范围有效期等选项,因此如果您希望Cookie有效一年,请将其添加到Cookie命令

$.cookie('high_contrast', 'false', {expires: 365});

如果您希望它在整个域中有效,这可能是您的实施的最佳情况,您可以添加路径'/':

$.cookie('high_contrast', 'false', {path: '/'});

答案 1 :(得分:1)

您可以在全局上下文中设置highContrast,以帮助您稍后评估同一页面上的

var highContrast = false;
$(document).ready(function(){
    // [...]
    highContrast = true;
    // [...]
});

但是每次页面刷新都会丢失该值,因此您可以 - 按照您的意图 - 使用jquery-cookie设置Cookie

$.cookie('highContrast', 'true', { path: '/' });

并在页面加载时阅读:

if($.cookie('highContrast') && $.cookie('highContrast') === "true") {};

通过设置path = '/',Cookie将在整个域中可用。

所以你的代码会改为:

$(document).ready(function(){
    // Append the stylesheet on page load
    if ($.cookie('highContrast') === "true") {
        $('head').append('<link rel="stylesheet" href="css/high-contrast.css" type="text/css" id="hc_stylesheet"/>');
    }
    // Add the click handler to switch the stylesheet on and off
    $("#contrast-btn a").click(function () {
        if (!($.cookie('highContrast') === "true")) {
            $('head').append('<link rel="stylesheet" href="css/high-contrast.css" type="text/css" id="hc_stylesheet"/>');
            $.cookie('highContrast','true',{path:'/'});
        }       
        else {
            // remove the high-contrast style
            $("#hc_stylesheet").remove();
            $.cookie('highContrast','false',{path:'/'});
        }
    });
});