0

私の垂直ナビゲーションは、兄弟のドロップダウンを押したときに以前に開いたドロップダウンが折りたたまれないことを除いて機能します。これで私を助けてくれるかどうか疑問に思っていました。

これが私のjavascriptコードです。完全に見たい場合は、jsfiddleリンクがあります:http://jsfiddle.net/CLNBn/2/

$('.vertical-nav ul li:has("div")').find('div').hide();

$('.vertical-nav li:has("div")').find('span:first').click(function() {
    $(this).parent('li').find('span:first').toggleClass("closed opened");
    if ($(this).parent('li').find('span:first').attr('class') == 'closed') {
        $(this).parent('li').find('span:first').text('+');
    } else {
        $(this).parent('li').find('span:first').text('-');
    }
    $(this).parent('li').find('div:first').slideToggle();
});
4

1 に答える 1

0

すでに要素に妥当なクラスを与えているので、このタスクは非常に簡単です。必要なのは、現在の要素の兄弟の子であるspanクラスを持つすべての要素を検索し、それらのイベントハンドラーをトリガーすることです。openedliclick

これは次の方法で実行できます。

$(this).closest('li').siblings().children('span.opened').click();

デモ

私はまた、あなたのコードを次のように単純化するために自由を取りました:

$('.vertical-nav li:has("div")').find('span:first').click(function() {
    var $this = $(this);
    $this.toggleClass("closed opened");
    if ($this.hasClass('closed')) {
        $this.text('+');
    } else {
        $this.text('-');
        $this.closest('li').siblings().children('span.opened').click();
    }
    $this.closest('li').find('div').first().slideToggle();
});​

コメントで述べたように、thisすでにspan要素を参照しているので、DOMツリーをトラバースして再度検索する必要はありません。

于 2012-07-29T23:50:54.193 に答える