jQuery - eq()似乎引用了一个不同于index()的元素 - 什么给出了什么? :/

时间:2010-03-02 08:19:33

标签: jquery select indexing

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

有什么想法吗?

1 个答案:

答案 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上使用它。