jQueryを効率的に書こう

jQuery初心者の方へ

そのコードもっと短くかけるかもしれません!
「一応動いているけど…」から脱却して効率の良い書き方を身につければ、
新たに書き始めるときにも、また修正するときにも時短になるはずです。

同クラス要素へのイベント

each は効率的に書く上では基本になります。

悪い例

$(function(){
  $('.elem').eq(0).text('テキスト1');
  $('.elem').eq(1).text('テキスト2');
  $('.elem').eq(2).text('テキスト3');
  $('.elem').eq(3).text('テキスト4');
  $('.elem').eq(4).text('テキスト5');
});

良い例

$(function(){
  $('.elem').each(function(i) {
    $(this).text('テキスト' + i)
  });
});

n番目をクリックしたら

btn01 をクリックしたら elem01 にイベントを発火したい場合。
下記サンプルでは表示/非表示を繰り返します。

See the Pen Xzmxpq by leo (@leo-trym) on CodePen.

悪い例

下記の悪い例のように、ボタンひとつひとつにイベントを作ると、
可読性も下がり修正も大変です。

$(function(){
  $('.btn').eq(0).click(function() {
    $('.elem').eq(0).toggle();
  });
  $('.btn').eq(1).click(function() {
    $('.elem').eq(1).toggle();
  });
  $('.btn').eq(2).click(function() {
    $('.elem').eq(2).toggle();
  });
  $('.btn').eq(3).click(function() {
    $('.elem').eq(3).toggle();
  });
  $('.btn').eq(4).click(function() {
    $('.elem').eq(4).toggle();
  });
  $('.btn').eq(5).click(function() {
    $('.elem').eq(5).toggle();
  });
});

良い例

押した btn の順番を取得して対応する elem にイベントを発生させます。

$(function(){
  $('.btn').click(function() {
    var i = $(this).index();
    $('.elem').eq(i).toggle();
  });
});

色々なタイミングで実行する

悪い例

タイミングごとに動作を書くと、修正箇所が増えていきます。

$(function(){

  // 読み込み時
  $('.elem').hide();

  // .btnクリック時
  $('.btn').click(function() {
    $('.elem').hide();
  });

});

// ウィンドウリサイズ時
$(window).resize(function(){
  $('.elem').hide();
});

良い例

onメソッドを上手く利用することで一括で指定することできます。
クリックイベント時には trigger を利用し、カスタムイベントを実行します。

$(function(){

  $('.btn').click(function() {
    $(window).trigger('event_name');
  });

});

$(window).on('load resize event_name', function(){
  $('.elem').hide();
});

場合によっては使う例

場合によっては関数化することもあります。

$(function(){

  // 読み込み時
  elem_hide();

  // .btnクリック時
  $('.btn').click(function() {
    elem_hide();
  });

  function elem_hide(){
    $('.elem').hide();
  }
});

// ウィンドウリサイズ時
$(window).resize(function(){
  elem_hide();
});

オプションを使いまわす

jQueryのプラグインを利用する際など、
同じオプションを使いまわす場合、変数を使い下記のように書くと便利です。

悪い例

$(function(){

  $('.elem01').slider({
    width: 100,
    height: 100,
    responsive: true
  });

  $('.elem02').slider({
    width: 100,
    height: 100,
    responsive: true
  });

});

良い例

$(function(){

  var option = {
    width: 100,
    height: 100,
    responsive: true
  }

  $('.elem01').slider(option);
  $('.elem02').slider(option);

});

条件で変数の値を変える

悪い例

if文を使うと見通しが悪くなり、何がなんだか分かりません。

$(function(){

  var x = '1';
  if ( x === '1' ) {
    var y = 'A';
  } else if ( x === '2' ) {
    var y = 'B';
  } else if ( x === '3' ) {
    var y = 'C';
  } else if ( x === '4' ) {
    var y = 'D';
  } else if ( x === '5' ) {
    var y = 'E';
  } else {
    var y = 'F';
  }

});

良い例

三項演算子を使うことで、コードがスッキリして一目瞭然です。

$(function(){
 
  var x = '1';
  var y = ( x === '1' ) ? 'A'
        : ( x === '2' ) ? 'B'
        : ( x === '3' ) ? 'C'
        : ( x === '4' ) ? 'D'
        : ( x === '5' ) ? 'E' : 'F';
 
});

Writer

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Contact

ご提案依頼、ご相談、お見積もりなど
お気軽にお問合わせください。

03-6403-3259

平日 10:00~19:00

「Web制作について」とお伝え頂ければ
担当者に取次させていただきます。

Mailform

contact@trym.jp
でも受け付けております。