2010-03-02 89 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

相關問題