2011-05-27 121 views
2

我有這塊代碼,旨在首先隱藏所有相關元素,但第一個。這,它確實很好。接下來,它應該基於哪個項目被選中來顯示/隱藏這些元素。但那部分不起作用。思考?jQuery顯示/隱藏兄弟姐妹

的jQuery:

$("#accordion dl:not(:first-child)").hide(); //hide all but first 
$("#menu_list a").click(function(){ 
var selected = this.name; //get ID from <a> name 
$('#'+selected).show('slow').siblings().hide('slow'); //show ID by selected name, hide the rest 
}); 

HTML:

<div id="menus"> 
    <ul id="menu_list"> 
     <li><a href="" class="menuselect" name="menu1">Menu_1</a></li> 
     <li><a href="" class="menuselect" name="menu2">Menu_2</a></li> 
     <li><a href="" class="menuselect" name="menu3">Menu_3</a></li> 
    </ul>  
    <div id="accordion"> 
     <dl id="menu1"> 
      <dt> 
       <h3>Menu 1 Item 1</h3> 
      </dt> 
      <dd> 
       <p>Quisque scelerisque scel nisl at pellentesque. Quisque scelerisque scel nisl at pellentesque.</p> 
      </dd> 
     </dl>   
     <dl id="menu2"> 
      <dt> 
       <h3>Menu 2 Item 1</h3> 
      </dt> 
      <dd> 
       <p>Quisque scelerisque scel nisl at pellentesque. Quisque scelerisque scel nisl at pellentesque.</p> 
      </dd> 
     </dl>   
     <dl id="menu3"> 
      <dt> 
       <h3>Menu 3 Item 1</h3> 
      </dt> 
      <dd> 
       <p>Quisque scelerisque scel nisl at pellentesque. Quisque scelerisque scel nisl at pellentesque.</p> 
      </dd> 
     </dl> 
    </div> 
</div> 

編輯:解決 -

好吧,我知道了。由於我已將選擇附加到鏈接上,因此點擊時一直刷新頁面。所以這在技術上是有效的,但是因爲頁面被刷新,所以再次隱藏起來。

$("#accordion dl:not(:first-child)").hide(); 
$("#menu_list a").click(function (e) { 
    var selected = this.name; 
    $('#'+selected).show('slow').siblings().hide('slow'); 
    e.stopPropagation(); 
    return false; 
}); 
+0

您正在使用什麼版本的jQuery? – 2011-05-27 15:46:54

+4

如果您回答了您自己的問題,請考慮將其張貼爲答案,然後您可以接受。 – rossipedia 2013-09-03 03:59:34

回答

0

Live Demo

似乎是爲我工作,也許我不完全理解的問題。我注意到的一件事是你錯過了第一個項目的結尾<dl>標籤。我補充說,他們似乎都工作正常。

+0

他的代碼缺少第一個'' - 您的代碼似乎已更正。我懷疑是這個問題。 – Dutchie432 2011-05-27 15:50:48

+0

缺少的dl是一個錯字,因爲我刪除了多餘的項目來簡化發佈在這裏的內容。 – dv8withn8 2011-05-27 15:56:30

+0

heh好..也忘了提及我添加#到href的鏈接。 – Loktar 2011-05-27 16:04:02

1

這應該工作。請注意,在你的代碼,你錯過了第一</dl>

現場演示:http://jsfiddle.net/wVJ52/

$("#accordion dl:not(:first-child)").hide(); //hide all but first 
$("#menu_list a").click(function() { 
    $('#accordion dl').hide('fast'); 
    $('#pnl'+this.name).show('fast'); 
}); 
+0

這工作得很好。比我提出的解決方案更清潔一點。謝謝。 – dv8withn8 2011-05-27 16:34:10