LoginSignup
2
2

More than 5 years have passed since last update.

jQuery アコーディオン

Last updated at Posted at 2016-02-27

アコーディオン

jsめも
所謂アコーディオンとかいう
dt押したらddでてきて、その中に閉じるボタンがある的なやつ
toggle使うだけでいけそうだけど、ボタンのアイコンとか変えるのにif文がいるんだったと思う

js
$(function(){

    var dt = $(".js-dt");
    var dd = $(".js-dd");
    var _close = $(".js-close a");
    dd.hide();
    dt.click(function(){
        var _this_dt = $(this).parents("dl").children("dt");
        var _this_dd = $(this).parents("dl").children("dd");
        if(_this_dd.css('display') != 'none'){
            _this_dd.slideUp(function(){
                _this_dt.removeClass("active");
            });
        }else{
            _this_dt.addClass("active");
            _this_dd.slideDown();
        };
    });
    _close.click(function(){
        var _this_dt = $(this).parents("dl").children("dt");
        var _this_dd = $(this).parents("dl").children("dd");
        _this_dd.slideUp(function(){
            _this_dt.removeClass("active");
        });
    });
});

って超絶ムダなスクリプトかいてたのを修正

js
$(function(){
    $(".js-dd").hide();
    $(".js-dt, .js-close a").click(function(){
        var _this_dt = $(this).parents("dl").children("dt");
        var _this_dd = $(this).parents("dl").children("dd");
        if(_this_dd.css('display') === 'none'){
            _this_dt.addClass("active");
            _this_dd.slideDown();
        }else{
            _this_dd.slideUp(function(){
                _this_dt.removeClass("active");
            });
        };
    });
});

if文はif(hoge.css('display') != 'none')よりif(hoge.css('display') === 'none')の方がわかりやすいかも
parentsとchildrenがキモい。.each()使ったらいいとおもうけど、とりあえずここまで

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2