Javascript 在另一个函数内部实现时读取cookie

Javascript 在另一个函数内部实现时读取cookie,javascript,cookies,Javascript,Cookies,我有以下功能来更改我的网站上的样式表,我想使用cookies保持样式表主题在页面上的持久性 <script type="text/javascript"> var i=1; function styleSheet(){ if(i%2==0){ swapper('css/main.css'); document.cookie = "username=Visitor"; }

我有以下功能来更改我的网站上的样式表,我想使用cookies保持样式表主题在页面上的持久性

<script type="text/javascript">
    var i=1;
    function styleSheet(){
        if(i%2==0){
            swapper('css/main.css');    
            document.cookie = "username=Visitor";
        }
        else{
            swapper('css/stylesheetalternate.css'); 
            document.cookie = "username=alternateVisitor";
        }
        i++;
    }
<button onclick="styleSheet()">Click me</button>

var i=1;
函数样式表(){
如果(i%2==0){
交换程序('css/main.css');
document.cookie=“用户名=访问者”;
}
否则{
交换程序('css/stylesheetalternate.css');
document.cookie=“username=alternateVisitor”;
}
i++;
}
点击我
我已经在这个函数中设置了cookies。我对设置到期日期或诸如此类的东西不太感兴趣,默认设置对我来说没问题。然而,我确实想尝试做的是每次使用我创建的按钮时读取此函数中的cookies。没有办法在同一个函数中读取它吗

我知道有一个jquery库可以做到这一点,但如果我能用javascript获得更好的性能,我不想使用jquery

编辑:


var i=1;
函数样式表(){
如果(i%2==0){
交换程序('css/main.css');
document.cookie=“用户名=访问者”;
readCookie(访客);
}
否则{
交换程序('css/stylesheetalternate.css');
document.cookie=“username=alternateVisitor”;
readCookie(替代设备);
}
i++;
}

当你说在我的函数中使用readCookie时,你的意思是像下面这样的吗?我从这种实现中注意到,在交换一次样式表之后,无论出于何种原因,都不可能再次交换,直到重新加载页面。

document.cookies只是所有cookies的一个大列表。您可以对其进行分析,以找到您感兴趣的:

function getCookieValue(cookieName) {
    var value = null;
    document.cookie.split(';')
        .forEach(function(pair){
            var pairArray = pair.split('=');
            if (pairArray[0]==cookieName) {
                value = pairArray[1];
            }
        });
    return value;
}

(未经测试,让我知道它是如何运行的。)

这里有一组简单的javascript cookie函数,您可以从任何函数中使用。因此,对于您的问题,您可以从函数调用
readCookie(“用户名”)
(或读取任何其他cookie值):

//createCookie()
//名称和值是字符串
//days是cookie过期之前的天数
//路径是可选的,应以前导“/”开头
//并且可以限制您站点上的哪些页面可以
//读饼干。
//默认情况下,站点上的所有页面都可以读取
//如果未指定路径,则返回cookie
函数createCookie(名称、值、天数、路径){
var日期,到期日=”;
路径=路径| |“/”;
如果(天){
日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
expires=“;expires=“+date.togmString();
}
document.cookie=name+“=”+value+expires+”;path=“+path;
}
函数readCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
有很好的理由远离jQuery,但性能并不是其中之一;如果方便的话,去吧。也就是说,它很好,不是jQuery插件。同意@ MiTimeCH,考虑使用“<代码> StestestySeHeTe< /Cord>”方法从您的赏金问题这里,等等,您究竟是什么意思,从我的函数Read Cuffy(用户名)调用?我不明白的是“名字”的用法。你是说在我的if条件中,我只是简单地调用readCookie(name),在本例中,名称是Visitor或alternateVisitor?我编辑了我的代码,以便更好地显示我在向代码添加内容方面的要求。此外,我不明白为什么我需要一个函数来创建cookies,而我并没有真正尝试对它们做任何特定的事情。有什么理由我不应该像现在这样创建它们吗?@Valrok-当你阅读一个cookie时,你阅读它的值,然后用这个值做一些事情(这就是阅读它的第一点)。我给您的
readCookie()
函数取一个参数,它是cookie名称(name=value的左侧部分),并返回值(name=value的右侧部分)。在您的示例中,您将执行类似于
var name=readCookie(“用户名”)
的操作,然后使用
name
变量执行操作。如果您需要进一步的帮助,您需要解释您试图读取的cookie值以及您想对其执行的操作。
function getCookieValue(cookieName) {
    var value = null;
    document.cookie.split(';')
        .forEach(function(pair){
            var pairArray = pair.split('=');
            if (pairArray[0]==cookieName) {
                value = pairArray[1];
            }
        });
    return value;
}
// createCookie()
// name and value are strings
// days is the number of days until cookie expiration
// path is optional and should start with a leading "/" 
//   and can limit which pages on your site can 
//   read the cookie.
//   By default, all pages on the site can read
//   the cookie if path is not specified
function createCookie(name, value, days, path) {
    var date, expires = "";
    path = path || "/";
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
    }
    document.cookie = name + "=" + value + expires + "; path=" + 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);
}