2017-03-31 3 views
0

jqueryを使用してdivのアコーディオンスタイルの開閉をしようとしています。しかし何らかの理由でjqueryのnext()が動作していないようです。私はタイトルがクリックされたとき、他のすべてのdivはクリックされたもの以外は閉じなければならない。divのトグルをスライディングする要素をクリックする

HTMLコード -

<div class="office-row"> 
    <h3 class="office-title">Title</h3> 
</div> 
<div class="office">sadasd</div> 
<div class="office-row"> 
    <h3 class="office-title">Title</h3> 
</div> 
<div class="office">sadasd</div> 
<div class="office-row"> 
    <h3 class="office-title">Title</h3> 
</div> 

デモ - https://jsfiddle.net/v3hc19np/1/

任意のヘルプは高く評価されます。

+0

完全なコードをここに含めます。 ** [mcve] ** – Tushar

+0

を参照してください。 'h3'要素は兄弟を持たないので、' next() 'は何も見つからない –

+0

次の前にparent()を追加しました。今度はスライドしますが、他のすべてのdivを閉じたいので、再びスライドします。私はhtmlを変更する必要がありますか? –

答えて

1

他の人によると、タイトルに隣接する$.next('div')が存在しないので、私は.officeを移動して、その要素が現在それに隣接しているようにしました。オリジナルのHTMLで更新されました。

$(function() { 
 
    var $titles = $('.office-title'), 
 
     $offices = $('.office'); 
 
    $titles.on('click', function() { 
 
    var $target = $(this).parent('.office-row').next('.office'); 
 
    $target.slideToggle(); 
 
    $offices.not($target).slideUp(); 
 
    }); 
 
});
.office { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="office-row"> 
 
    <h3 class="office-title">Title</h3> 
 
</div> 
 
<div class="office">sadasd</div> 
 
<div class="office-row"> 
 
    <h3 class="office-title">Title</h3> 
 
</div> 
 
<div class="office">sadasd</div> 
 
<div class="office-row"> 
 
    <h3 class="office-title">Title</h3> 
 
</div> 
 
<div class="office">sadasd</div>

+0

ありがとうございました。 html構造を変更せずにこれを達成することは可能ですか?私はしたが、それは完全に動作していない。 –

+0

@PrithvirajMitra確かに可能ですが、なぜあなたはしたいですか? JSはちょっと変わってきますが、何も変わりません。今実装するのに問題がある場合は、元のHTMLを使用して何かを変更することはできません。 –

+0

@PrithvirajMitraは元のHTMLでコードを更新しました –

0

ソリューション:

あなたのdiv要素は、このように次の( 'DIV')が見つかりませんでした、正しくネストされていませんでした。

<div class="office-row"> 
    <h3 class="office-title">Title</h3> 
    <div class="office">sadasd</div> 
</div> 
<div class="office-row"> 
    <h3 class="office-title">Title</h3> 
    <div class="office">sadasd</div> 
</div> 
<div class="office-row"> 
    <h3 class="office-title">Title</h3> 
    <div class="office">sadasd</div> 
</div> 

デモ::ここではどのようにすべきだ照会のための作業コードさ https://jsfiddle.net/v3hc19np/5/

0

私たちができたループ要素とここに機能トグル使用し、その後なしのjQueryを使用してそれらを表示し、

$('.office-title').click(function() { 
    $(".office").each(function(index,obj){ 
     $(obj).hide(); 
    }); 
    $(e.target).parent().next().slideToggle(); 
    return false; 
    }); 
関連する問題