この質問のために、ネストされたul「ツリー」がありますが、これは最上位に数レベルと数個の子のみですが、最上位のul(id="group"
ここで対象)からいくつかある可能性があると想定できる場合ネストされた要素ですが、常にこの構造に従います。現時点では、折りたたみ時に子の ul 要素を折りたたむトップ要素のみがあります。私は、すべての ul 要素でこの性質を実現したいと考えています。さらに、クリックした別の「同じレベル」で開いている要素も折りたたんで、別の ul だけが開いているようにしたいと考えています。達成しようとしている機能について説明できたことを願っています。私は使うべきだと感じていますが、それを使っslideToggle()
たすべての試みはうまくいきませんでした.delegate()
しかし、私は伝播(「イベントバブリング」)を理解しており、それがそのようなタスクに進む方法だと感じる理由の一部です. もう 1 つは、新しい要素を ul に追加する必要があるかもしれないということです。だからここに私が現在持っているものがあります:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$('ul#group').delegate('a', 'click', function(event) {
if($(event.target).next().is(':visible')) {
if($(event.target).next()) {
$(event.target).next().find('ul').slideUp(250, function() {
$(event.target).next().slideUp(250);
});
}
} else {
$(event.target).next().slideDown(250);
}
});
});
</script>
<ul id="group">
<li>
<a href="#" onclick="return false;">Foo Bar 1</a>
<ul>
<li>
<a href="#" onclick="return false;">Foo 1</a>
<ul>
<li>
<a href="#" onclick="return false;">Bar 1</a>
</li>
</ul>
</li>
<li>
<a href="#" onclick="return false;">Foo 2</a>
<ul>
<li>
<a href="#" onclick="return false;">Bar 2</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#" onclick="return false;">Bar Foo 2</a>
<ul>
<li>
<a href="#" onclick="return false;">Bar 1</a>
<ul>
<li>
<a href="#" onclick="return false;">Foo 1</a>
</li>
</ul>
</li>
<li>
<a href="#" onclick="return false;">Bar 2</a>
<ul>
<li>
<a href="#" onclick="return false;">Foo 2</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
そして、これがテストケースへのjsfiddle リンクです。これを達成できる最善の方法であれば、すべての意見を歓迎します。