【发布时间】:2012-02-25 22:24:00
【问题描述】:
本周我研究并整理了一些 jquery(这是我第一次使用 jquery)来控制自定义 WordPress sidebar.php 文件中的可折叠菜单。菜单是动态生成的,使用wp_query通过自定义分类和自定义排序顺序等选择自定义帖子类型并排序(所以没有插件解决方案)。
我想在网站访问者浏览内容时保持菜单部分的展开/折叠状态。使用 jquery,我似乎成功地将唯一的 cookie 名称写入浏览器,并且似乎我成功地传递了我的标签的“展开”或“折叠”类值。
但是,cookie 不能跨多个页面工作 - 如果您导航到另一个页面,则在您单击菜单项之前不会设置新的 cookie。如果您点击返回浏览器并返回上一页,您在前一页上设置的 cookie仍然设置(这很好)。请注意,当导航到新页面时,菜单确实会重新生成,但菜单内容很少更改(因此 ID 是稳定的),并且 cookie 仅用于当前会话(并且仍应保留在前一页中) .
我已经尝试过设置 PHP cookie,并且它们在页面之间保持得很好。但是我的 jquery cookie 似乎是特定于页面的,所以我做错了。
这是出现在我的 PHP 页面中的 jquery 代码,用于控制菜单并写入我的 cookie(注意:我 am 链接到 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 名称和值如下所示:
流派2:折叠
流派3:扩展
genre1outlet2:扩展
genre2outlet3:扩展
genre2outlet4:扩展
如上所述,我是 jquery 的新手。我对使用 cookie 也很陌生。任何帮助将不胜感激。
附:一旦我得到这个工作,我不知道如何从我的 cookie 数组中获取信息并将类应用到我的菜单 - 但这是一个单独的问题。
【问题讨论】:
-
设置路径为/,它会