2012-09-11 66 views
0

我有一個多層菜單,裏面有錨標籤。 我的問題是讓jQuery選擇器正常工作。jQuery選擇器不適用於兄弟姐妹?

工作代碼:

$(this) 
    .closest('li') 
    .siblings('li.open') 
    .children('a') 
    .children('i') 
    .toggleClass('class1') 
    .toggleClass('class2'); 

它應該是什麼:

$(this) 
    .closest('li') 
    .siblings('li.open > a > i') 
    .toggleClass('class1') 
    .toggleClass('class2'); 

但不會連這個工作:

$(this) 
    .closest('li') 
    .siblings('li.open a i') 
    .toggleClass('class1') 
    .toggleClass('class2'); 

我想在文本形式做什麼: onClick事件定位一個定位標記。我希望他的父母LI的兄弟姐妹中的i-標籤 - 聽起來可笑的上帝 - 切換兩個不同的類。

HTML

<ul> 
    <li> 
     <a><i class="class1"></i>Label</a> 
     <ul> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
     </ul> 
    </li> 
    <li class="open"> 
     <a><i class="class1"></i>Label</a> 
     <ul> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
      <li> 
       <a><i class="class1"></i>Label</a> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <a><i class="class1"></i>Label</a> 
    </li> 
    <li> 
     <a><i class="class1"></i>Label</a> 
    </li> 
    <li> 
     <a><i class="class1"></i>Label</a> 
    </li> 
    <li> 
     <a><i class="class1"></i>Label</a> 
    </li> 
    <li> 
     <a><i class="class1"></i>Label</a> 
    </li> 
</ul> 
+2

如果我們能夠看到您的HTML,這個問題會更有意義。 –

+0

我加了。這是一個簡單的列表。有更多的列表嵌套在其中。如您所見,第二個頂級LI擁有「打開」類。 如果我點擊第一個頂級LI的錨點,我需要li.open的錨點標記i-tag(對不起,這樣的措辭)來切換類 – ProblemsOfSumit

回答

2

我認爲它不會工作的原因是因爲

('li.open > a > i') 

不是

$(this).closest('li') 

李的兄弟姐妹兄弟是另一個李。

你可以嘗試

$(this).closest('li').sibling('li.open').find('a > i').toggleClass('blah'); 

爲什麼你不能使用第一段代碼你貼?

+0

我可以使用它。它只是看起來不漂亮,我想知道爲什麼它不起作用。 感謝您的解釋。 – ProblemsOfSumit

+0

但我不能使用find(),因爲LI有更多的孩子而不僅僅是錨標籤。例如其他列表,包括更多的錨標籤。這是一個多級菜單 – ProblemsOfSumit

+0

好吧,是的,在這種情況下,你首次發佈的代碼可能是最好的方式來做到這一點 – Brentoe