web-dev-qa-db-ja.com

next()を使用してjqueryで最も近いulを見つける方法は?

私はこのようなシンプルなメニューを持っています:

_<ul id="navigation">
    <li id="m_li">
         <div><span>+</span><a href="#" >myself</a></div>
        <ul class="test" id="x_ul">
            <li id="li">
                <a href="#" >Pictures</a>
            </li>
            <li id="li">
                <a href="#" >Audio</a>
            </li>
        </ul>
    </li>
    <li id="profile_modeling_li">
        <div><span>+</span><a href="#" >friend</a></div>
        <ul class="test" id="y_ul">
            <li id="li">
                <a href="#" >Pictures</a>
            </li>
            <li id="li">
                <a href="#" >Video</a>
            </li>
        </ul>
    </li>
</ul>
_

次に、jqueryを使用するので、_+_記号をクリックすると、ulが下にスライドします。

_$("#navigation > li > div > span").click(function(){

    if(false == $(this).next('ul').is(':visible')) {
        $('#accordion ul').slideUp(300);
    }
    $(this).next('ul').slideToggle(300);
});
_

問題は、$(this).next('ul')が次のulを好まないように見えることです

私が間違っていることは何ですか?

8
Patrioticcow

使用する

$(this).parent().next()

の代わりに

$(this).next();

そしてもちろん、目的の要素を引数として識別するセレクター(より単純またはより複雑)を渡すことができます。

$(this).parent().next('ul.test[id$="_ul]"'); 
10
gion_13

.next / .prev兄弟をトラバースし、ulはスパンの子ではありません。おそらく最も近いliを見つけ、.testを見つける必要があります。

 $(this).closest('li').find('ul.test')
3

変換

$(this).next('ul')

$(this).parent().next('ul')

あなたはここで見ることができます http://jsfiddle.net/PYqS2/

1
Hüseyin BABAL