【问题标题】:Using a cookie to remove and add classes to list items使用 cookie 删除和添加类以列出项目
【发布时间】:2014-03-06 16:16:56
【问题描述】:

我知道有一些关于这个问题的帖子,但没有一个对我有用,所以我决定创建自己的线程。

这是我的清单:

<nav>
<!-- nav menu -->
    <ul class="clearfix">
        <li><a runat="server" href="Slideshow.aspx">Home</a></li>
        <li><a runat="server" class="active" href="AboutUs.aspx">About Us</a></li>
        <li><a runat="server" href="Contact.aspx">Contact Us</a></li>
    </ul>
</nav>

还有 CSS:

nav li a.active
{
    border-bottom: 3px solid #fd9625;
}

当用户单击列表项时,会显示底部边框。 我知道这应该使用 cookie 在服务器端进行更改,但我找不到任何适合我的解决方案。

到目前为止,这是我的 jQuery:

$(document).ready(function () {    
    $('.clearfix').on('click', 'li a', function () {
        $(this).siblings().removeClass('active');
        $(this).addClass('active');
    });
});

我不确定如何实现 cookie。

【问题讨论】:

  • 你打算在 cookie 中保存什么?
  • 饼干?首先,您实际上可以在客户端读取/写入 cookie。但是 - 我不确定这就是你要找的。您可能使用 cookie 的唯一可能原因是保存页面状态 - 因此您的网站的某些部分将始终以相同的顺序显示。
  • 我想使用cookie来设置被点击链接的CSS(服务器端)。我不知道 cookie 的内容。我希望其他人可以通知我。

标签: jquery html css list cookies


【解决方案1】:

这是一个工作示例 -> http://jsfiddle.net/k6r86/ 使用 cookies.js

$(document).ready(function () {
    var index = Cookies.get('active');
    $('.clearfix').find('a').removeClass('active');
    $(".clearfix").find('a').eq(index).addClass('active');
    $('.clearfix').on('click', 'li a', function (e) {
        e.preventDefault();
        $('.clearfix').find('a').removeClass('active');
        $(this).addClass('active');
        Cookies.set('active', $('.clearfix a').index(this));
    });
});

查看小提琴,点击周围然后再次更新小提琴,看到它已经存储了活动的&lt;li&gt;,并在重新加载时将&lt;li&gt;的类设置为active。我已经禁用了链接,不是错误,只是为了测试。

【讨论】:

  • 成功了! :) 虽然当我点击我的链接时,我并没有被重定向。我刚刚删除了e.preventDefault();,现在它可以 100% 工作了。感谢所有帮助过的人!
  • 有没有办法将“主页”链接设置为在页面加载时预先启用 CSS,然后让页面继续提供与小提琴中相同的效果?
  • 您的意思是,如果活动未设置为 cookie,则将“主页”设置为活动?在var index = Cookie.get... 之后添加这一行 -> index = (typeof index == 'number') ? index : 0; 参见小提琴 -> jsfiddle.net/VJ52U
  • 是的! :) 就这样!谢谢
  • 您好,很抱歉打开一个旧线程。但是如何更改它以便记住所有已单击的链接,然后添加“活动”类。我想要以前点击过的所有链接的样式!
【解决方案2】:

jQuery Cookie 插件是一种方法:

https://github.com/carhartl/jquery-cookie

示例:设置 cookie

$.cookie('cookie_name', 'value'); // to set

$.cookie('cookie_name'); // to get

【讨论】:

    【解决方案3】:

    您需要一些服务器端语言,如 ruby​​ 或 php 来实现这一点。当用户单击链接时,您必须对服务器进行 ajax 调用,并设置 cookie。当用户重新加载页面时,您必须呈现 HTML 并决定,如果设置了 cookie,则添加正确的 css 类,否则,什么都不添加。

    你在服务器端使用什么语言?

    【讨论】:

    • 感谢您的回复!我明白你的意思,但我不知道如何实现这个方法。我目前在服务器端使用 JavaScript。
    【解决方案4】:

    您可以使用jQuery.cookie() 库:

    $(document).ready(function () {
      var activePage = $.cookie('page'); // read the value
      if(activePage.length > 0 && activePage != undefined){ // check if it holds any value
        $('.active').removeClass('active'); // remove the existing active class
        $('.clearfix').find('[href*="'+ activePage  +'"]').addClass('active');
      }// add the active class to the anchor which holds the href value
      $('.clearfix').on('click', 'li a', function (e) {
          $('.active').removeClass('active');
          $(this).addClass('active');
          $.cookie('page', $(this).attr('href').split('.')[0]); // save the href in cookie
      });
    });
    

    A demo with jQuery.cookie() library

    【讨论】:

    • 这不起作用,因为每次单击链接时都会重新加载页面,因此页面及其所有内容都将重置为其默认值。
    • @PierreNortje 是的,我同意你可以按照我建议的更新代码的方式使用 cookie。
    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2014-07-09
    相关资源
    最近更新 更多