2010-03-02 56 views
0

这里是我的代码:修订JSjQuery - eq()似乎指向与index()不同的元素 - 什么给? :/

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的索引,所以我没有理由认为它应该这样做。

任何想法?

回答

1

好的。我在需要的地方添加了0​​。此外,我们抓取的index()号码考虑到ul.menu下的第一个li,它没有.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上使用它。

+0

第一个代码块应该得到每个'ul.menu li'的第一个子UL的索引,不是吗?我将如何匹配这两个代码块来引用相同的UL? :/ – dave 2010-03-03 00:41:14

+0

这将是,除了这行'wookie + =','+ jQuery(this).parent()。index();'是抓住可见'ul'的**父**的索引(这是'li')。摆脱'parent()',你会得到'ul'本身的索引。 – user113716 2010-03-03 00:52:04

+0

不期待快速回复...干杯:>我删除了父(),所以它只是拉jQuery(this).index()但它仍然打开错误的菜单项。 – dave 2010-03-03 01:07:44

相关问题