本周,我研究并整理了一些jquery(这是我第一次使用jquery),以控制自定义WordPress sidebar.php文件中的可折叠菜单。该菜单是动态生成的,使用wp_query通过自定义分类法和自定义排序顺序等来选择和排序自定义帖子类型(因此没有插件解决方案)。
当网站访问者浏览内容时,我想保持菜单部分的展开/折叠状态。使用jquery,似乎可以成功地向浏览器写入唯一的cookie名称,并且可以成功地传递标签的“扩展”或“折叠”类值。
但是,Cookie不能跨多个页面工作-如果您导航到另一个页面,则在单​​击菜单项之前不会设置新的Cookie。如果您单击后退浏览器并返回上一页,则在前一页上设置的cookie仍会设置为(很好)。请注意,导航到新页面时,菜单确实会重新生成,但菜单内容很少更改(因此ID稳定),并且cookie仅用于当前 session (仍应保留在前一页) 。
我已经尝试过设置PHP cookie,并且它们在页面之间显示得很好。但是我的jquery cookie似乎是特定于页面的,所以我做错了事。
这是显示在我的PHP页面中的jquery代码,用于控制菜单和编写cookie(注意:我链接到jquery.cookie.js插件):

        <script type="text/javascript">
        $(document).ready(function() {
            setTimeout(function() {
                $('#port-menu > li > a.expanded + ul, #port-menu > li ul li > a.collapsed + ul').slideToggle('medium');
                $('#port-menu > li > a').click(function() {
                    $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium');
                    var vartag = $(this).get(0).tagName.toLowerCase();
                    var varclass = $(this).attr('class');
                    var cookiename = $(this).parent().attr('id');
                    $.cookie(cookiename, $(this).attr('class'));
                });
                $('#port-menu > li ul li > a').click(function() {
                    $(this).toggleClass('expanded').toggleClass('collapsed').parent().find('> ul').slideToggle('medium');
                    var vartag = $(this).get(0).tagName.toLowerCase();
                    var varclass = $(this).attr('class');
                    var vargenre = $(this).parent().parent().parent().attr('id');
                    var varoutlet = $(this).parent().attr('id');
                    var cookiename = vargenre + varoutlet;
                    $.cookie(cookiename, $(this).attr('class'));
                });
            }, 250);
        });
    </script>
例如,动态创建的cookie名称和值如下所示:

如上所述,我是jquery的新手。我也是使用Cookie的新手。任何帮助将不胜感激。
P.S.一旦完成这项工作,我就不知道如何从Cookie数组中获取信息并将这些类应用到菜单中-但这是一个单独的问题。

最佳答案

我认为您应该尝试指定路径。它可能看起来像这样:

$.cookie(cookiename, $(this).attr('class'), { path: '/' });

然后,一旦您设置Cookie,所有网站都可以使用它。默认路径是设置cookie的子页面的路径。在这种情况下,cookie仅可用于该子页面。

该规则(我的意思是带有路径)通常适用于cookie。 不仅是jQuery创建的

09-30 16:48
查看更多