【问题标题】:Hide table rows if Cookie is there如果存在 Cookie,则隐藏表格行
【发布时间】:2010-03-30 07:46:59
【问题描述】:

根据我之前的问题herehere,我发现我可以用javascript 设置cookie。我想将它与 jquery 结合起来,为切换的表行设置一个 cookie 状态。我想在重新加载时隐藏隐藏的行。

这是我目前所取得的成就:

// Load cookies if any   
if(readCookie('togState')) {
       $('table#toggle tr.' + readCookie('togState')).hide();
    }

    $(function() {
        $('table#toggle tr.container').click(function() {
          var idTog = $(this).attr('id');
            $(this).toggleClass('off').nextAll('.' + idTog).toggle();
            setCookie('togState', idTog, 30);
            alert('Cookies: ' + readCookie('togState'));
        });

});

家长:<tr id="parent-1" class="container">

以下孩子:<tr class="contained parent-1">

如您所见,cookie 已被读取,但在浏览器刷新时并未设置。我做错了什么?

如果父容器被点击,我想要隐藏所有切换的行(它们的类等于其父容器的 ID),因此设置了 cookie。

任何帮助将不胜感激。谢谢。

我用来快速检查的源cookie:

function setCookie(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) {
    setCookie(name,"",-1);
}

更新:

我也试过每个功能都没有运气:

$('table#toggle tr.' + readCookie('togState')).each(function() {
     $(this).hide();
   });

更新 2:

如果我将检查放在 jquery 中(我使用了 hide()),它可以工作, 但仅适用于单个 cookie。所以现在的实际问题是如何为更多的父行保留更多的cookie?

【问题讨论】:

    标签: javascript jquery dom


    【解决方案1】:

    如果您使用 this answer 中的 setCookie() 函数,您将 cookie 的生命周期设置为 30 秒。这可能不足以满足您的要求,您可能应该考虑稍微增加它。 :-)

    编辑回复:您的问题编辑 - 如果您尝试设置多个 cookie,以下行会出现问题:

    document.cookie = name+"="+value+expires+"; path=/";
    

    在这里,您每次调用 setCookie() 时都会覆盖 cookie 属性。如果要设置多个 cookie,则需要在每次调用 setCookie() 时在字符串中添加/附加一个新的名称/值对

    【讨论】:

    • 函数如下: function setCookie(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(天*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/";实际上来自接受的答案链接。谢谢
    • @kuswantin,请在您的问题中提出。
    • @kuswantin:您在问题中提到它适用于第一个 cookie。每次调用 setCookie() 时,您似乎都在覆盖您的 cookie。查看我的更新。
    • @kuswantin:那么您应该将 cookie 中的名称与它们所针对的元素的 id 相关联,并在阅读时将 cookie 反序列化为对象/“关联数组”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2015-01-27
    • 2022-08-11
    • 2014-09-06
    • 2011-09-11
    相关资源
    最近更新 更多