JSFiddle - React, Tailwind, and code Playground

by tea4two

HTML

<h1>通常アコーディオンメニュー</h1>
<dl id="menu">
    <dt>メニュー1</dt>
    <dd>
        some text<br>
        some text<br>
        some text
    </dd>
    <dt>メニュー2</dt>
    <dd>
        some text<br>
        some text<br>
        some text
    </dd>
    <dt>メニュー3</dt>
    <dd>
        some text<br>
        some text<br>
        some text
    </dd>
</dl>

CSS

#menu {
    width: 200px;
}
dt, dd {
    padding: 5px;
}
dt {
    background-color: lightgreen;
    color: #fff;
    font-weight: bold;
}
dt.opened {
    background-color: green;
}

JavaScript

var $menu = $('#menu'),
    $allDT = $menu.find('dt'),// find()は子要素セレクタ検索
    $allDD = $menu.find('dd'),
    _speed = 200;

$allDD.hide(); // もしJSが効かなかった場合のことを考えて、見えた状態から隠す。
$allDT.css('cursor','pointer'); //マウスカーソルの見た目を変える

$allDT.click(function() {
    var $dt = $(this),
        $dd = $dt.next(); // next()メソッド 次の兄弟要素を取得
    
    console.log('$ddの状態は? ', $dd.is(':visible') );
    if( $dd.is(':visible') ) { //:visible 擬似クラスチェック
        //セレクタについて http://goo.gl/GIE2IE
        $dt.removeClass('opened');
        $dd.slideUp(_speed);
        return; //処理をストップする
    }
    $allDT.removeClass('opened');
    $allDD.slideUp(_speed);
    $dt.addClass('opened');
    $dd.slideDown(_speed);
});