这是我的代码: UPDATED JS
jQuery(document).ready(function()
{
var cookieName = 'activeMenus';
var openMenus = (jQuery.cookie(cookieName) == null) ? 0 : jQuery.cookie(cookieName).substring(1).split(',');
var wookie = '';
jQuery('ul.menu li ul').css('display', 'none');
// Reopen all the menus from the cookie
if (openMenus != 0)
{
for (var i = 0; i < openMenus.length; i++)
{
alert('Opening: ' + openMenus[i]);
jQuery('ul.menu li').children('ul').eq(openMenus[i]).css('display', 'block');
}
}
// Hide the menu upon click and modify the cookie
jQuery('ul.menu span.topdaddy span').click(function()
{
// Toggle the menu for the clicked link
jQuery(this).parents('li').find('ul').slideToggle('slow', function()
{
// Once the menu has been toggled - Find all the open menus
jQuery('ul.menu li').children('ul:visible').each(function()
{
wookie += ',' + jQuery(this).index(); // Build the index list
jQuery.cookie(cookieName, wookie);
});
});
wookie = '';
});
});
HTML 的
<ul class="menu">
<li class="item1">
<a href="#"><span>Link 1</span></a>
</li>
<li class="parent item55">
<span class="topdaddy"><span>Link 2</span></span>
<ul>
<li class="item62">
<a href="#"><span>Link 3</span></a>
</li>
<li class="item63">
<a href="#"><span>Link 4</span></a>
</li>
</ul>
</li>
<li class="parent item56">
<span class="topdaddy"><span>Link 5</span></span>
<ul>
<li class="item69">
<a href="#"><span>Link 6</span></a>
</li>
<li class="parent item70">
<ul>
<li>asdasd</li>
</ul>
</li>
</ul>
</li
</ul>
这是一个菜单系统,它使用cookie来记住当前打开的菜单,以便在每个页面加载时重新打开这些菜单。
代码可以工作......但它有点儿错误。
.eq()调用是打开索引2而不是1.它们都应该是基于0的索引,所以我认为它没有理由这样做。
有什么想法吗?
答案 0 :(得分:1)
确定。我在需要的地方添加了>
。另外,我们抓取的index()数字考虑了li
下没有ul.menu
类的.parent
。这没关系,但我必须确保我们在li
下的ul.menu
整套上设置索引,而不是将集合限制为li.parent
让我知道这对你有用。
$(document).ready(function() {
var cookieName = 'activeMenus';
var openMenus = (jQuery.cookie(cookieName) == null) ? 0 : jQuery.cookie(cookieName).substring(1).split(',');
var wookie = '';
jQuery('ul.menu > li.parent > ul').css('display', 'none');
if (openMenus != 0) {
for (var i = 0; i < openMenus.length; i++) {
alert('Opening: ' + openMenus[i]);
jQuery('ul.menu > li').eq(openMenus[i]).children('ul').css('display', 'block');
}
}
jQuery('ul.menu span.topdaddy').click(function() {
jQuery(this).next().slideToggle('slow', function() {
jQuery('ul.menu > li.parent > ul:visible').each(function() {
wookie += ',' + jQuery(this).parent().index();
jQuery.cookie(cookieName, wookie);
});
});
wookie = '';
});
});
此代码:
jQuery('ul.menu li').children('ul:visible').each(function()
{
wookie += ',' + jQuery(this).parent().index(); // Build the index list
jQuery.cookie(cookieName, wookie);
});
...似乎是获得li
元素的ul.menu
元素的索引。
这段代码:
jQuery('ul.menu li ul').eq(openMenus[i]).css('display', 'block');
...似乎使用了上面的索引,但是使用了一组不同的元素(ul
,它是您存储在cookie中的索引的子元素。)
所以看起来你正在使用ul.menu li
的索引并在ul.menu li ul
上使用它。