これは、私が使用している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でそれを行うにはどうすればよいですか?
問題は、ユーザーが複数のクラスを持つ可能性があることです。それ以外の場合は、次のことができます。
$('.myclass a').click(function() {
var className = $(this).attr('class');
switch(className){
case 'class1':
//put your cases here
}
});
これを試して。それほどクリーンではありませんが、それでも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;
}
}
私は最もクリーンな方法はこれだけかもしれないと思います:
$('.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/
SwitchステートメントでhasClassを確認するには:
var elementClass;
var classCheck = $('#myElement').hasClass(elementClass)
switch(classCheck){
case elementClass === 'foo':
console.log('whatever');
break;
}
これは遅れており、ユーザーのクラスは1つしかないことはわかっていますが、クラスが複数ある場合は次のようになります。
//<div class="foo bar"></div>
//<div class="other bar"></div>
switch(true) {
case 'foo':
true;
break;
case 'other':
true;
}
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;
}
}
}
});
$("#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>