web-dev-qa-db-ja.com

要素に特定のクラスがあるかどうかをテストするためにjQuery / Javascriptでswitchステートメントを作成するにはどうすればよいですか?

これは、私が使用しているif-elseステートメントの構造です。

$('.myclass a').click(function() {
   if ($(this).hasClass('class1')) {
        //do something
   } else if ($(this).hasClass('class2')) {
        //do something
   } else if ($(this).hasClass('class3')) {
        //do something
   } else if ($(this).hasClass('class4')) {
        //do something
   } else {
        //do something
   }
});

すでにかなりの数のケースがあり、switchステートメントを使用する方が良いと思いました。 jQuery/javascriptでそれを行うにはどうすればよいですか?

11
catandmouse

問題は、ユーザーが複数のクラスを持つ可能性があることです。それ以外の場合は、次のことができます。

$('.myclass a').click(function() {
   var className = $(this).attr('class');
   switch(className){
      case 'class1':
     //put your cases here
   }
});
19

これを試して。それほどクリーンではありませんが、それでもswitchステートメントです。

$('.myclass a').click(function() {
    switch (true) {
      case $(this).hasClass('class1'):
        // do stuff
        break;
      case $(this).hasClass('class2'):
        // do stuff
        break;
      case $(this).hasClass('class3'):
        // do stuff
        break;
    }
}
20
Xyan Ewing

私は最もクリーンな方法はこれだけかもしれないと思います:

$('.myclass a.class1').click(function() {
   // code to process class1
});

$('.myclass a.class2').click(function() {
   // code to process class2
});

$('.myclass a.class3').click(function() {
   // code to process class3
});

$('.myclass a.class4').click(function() {
   // code to process class4
});

それらが無数にある場合は、次のようなデータ構造に配置することもできます。

// to define them all
var classHandlers = {
    class1: function() {
        // class1 code here
    },
    class2: function() {
        // class2 code here
    },
    class3: function() {
        // class3 code here
    },
    class4: function() {
        // class4 code here
    }
};

// to register them all
$.each(classHandlers, function(key, fn) {
    $('.myclass a.' + key).click(fn);
});

クラス名のないオブジェクトに対してイベントハンドラーを実行する方法を(コメントで)尋ねたので、クラス名がない場合にそれを実行する方法は次のとおりです。

$(".myclass a").not("[class]").click(function() {
    // code to handle objects with no class name here
});

私はここでそれをテストしました: http://jsfiddle.net/jfriend00/TAjKR/

5
jfriend00

SwitchステートメントでhasClassを確認するには:

var elementClass;
var classCheck = $('#myElement').hasClass(elementClass)

switch(classCheck){
  case elementClass === 'foo':
     console.log('whatever');
     break;
}
0
Sayed Shahidi

これは遅れており、ユーザーのクラスは1つしかないことはわかっていますが、クラスが複数ある場合は次のようになります。

//<div class="foo bar"></div>
//<div class="other bar"></div>

switch(true) {
  case 'foo':
    true;
    break;
  case 'other':
    true;
}
0
4lackof

1つの要素が複数のクラスを持つことができ、elem.classNameを使用して切り替えることができないため、単一のswitchステートメントがここで役立つとは思いません。オプションは、スイッチを持つforステートメントを使用して、より読みやすい方法でコードを構造化することです...:

$('.myclass a').click(function() 
{
    var classes = ["class1", "class2", "class3","class4"];
    var self = $(this);
    for(var i =0, ii = classes.length;i<ii;i++)
    {
        var className = classes[i];
        if(self.hasClass(className))
        {
            switch(className)
            {
                case 'class1':
                    //code here... 
                break;
                case 'class2':
                    //code here... 
                break;      
                case 'class3':
                    //code here... 
                break;     
                case 'class4':
                    //code here... 
                break;
            }

        }
    }       
});
0
Alex Pacurar
    $("#isTest").click(function () {

          if($('div').is('.redColor')){
                $('div').addClass('blueColor');
          }

    });

    $("#hasClassTest").click(function () {

          if($('div').hasClass('.redColor')){
                $('div').addClass('blueColor');
          }

    });

        $("#reset").click(function () {
          location.reload();
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<style type="text/css">
  .redColor {
        background:red;
  }
  .blueColor {
        background:blue;
  }
 </style>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
</head>
<body>
  <h1>jQuery check if an element has a certain class</h1>

  <div class="redColor">This is a div tag with class name of "redColor"</div>

  <p>
  <button id="isTest">is('.redColor')</button>
  <button id="hasClassTest">hasClass('.redColor')</button>
  <button id="reset">reset</button>
  </p>

</body>
</html>
0
Mr. HK