javascript开关语句,如果字符串包含子字符串
我试图找出如何执行switch语句,其中我需要找到对象的类名,然后根据类名(在switch语句中)执行某些操作 在本例中,我需要switch语句在类包含特定单词(如“person”)时执行我需要的任何操作 html 不能保证switch语句名(如“person”)会在第一个位置javascript开关语句,如果字符串包含子字符串,javascript,jquery,Javascript,Jquery,我试图找出如何执行switch语句,其中我需要找到对象的类名,然后根据类名(在switch语句中)执行某些操作 在本例中,我需要switch语句在类包含特定单词(如“person”)时执行我需要的任何操作 html 不能保证switch语句名(如“person”)会在第一个位置 我知道我可以在数组中搜索特定的单词,但我不知道如何将其添加到这类内容中。您需要使用.split()和.indexOf()的组合。您的代码如下所示: var clicked = $(e.target).attr('clas
我知道我可以在数组中搜索特定的单词,但我不知道如何将其添加到这类内容中。您需要使用.split()和.indexOf()的组合。您的代码如下所示:
var clicked = $(e.target).attr('class');
var classes = clicked.split(' ');
if(classess.indexOf('person') > 0) {
//do work
} else if (classes.indexOf('foo') > 0) {
//do work
} else if (classes.indexOf('bar') > 0) {
//do work
}
.split()上的MDN
MDN on.indexOf()正如我在评论中所说,在这种情况下,
switch
语句似乎不是合适的方法
因为您使用的是jQuery,所以只需使用:
如果要对多个类执行更复杂的操作,可以创建一个class->function
映射,只需在类列表上迭代:
var classActions = {
person: function(element) { /* do something */ },
temp: function(element) { /* do something */},
// ...
};
var classes = e.target.className.split(/\s+/);
$.each(classes, function(index, cls) {
classActions[cls](e.target);
});
请注意,有很多方法允许您这样做。例如,您可以使用
string.search(substring)
检查字符串是否包含您的子字符串。如果存在子字符串,则返回找到的索引(从0到n的某个数字),否则如果未找到,则返回-1。因此,如果搜索
大于或等于0,则子字符串存在
if(clicked.search("person") >= 0)
// "person" is in clicked
听起来
switch
语句不是解决此问题的合适方法。它使用严格比较将输入值与每个案例
值进行比较。用if
语句代替。我很害怕!谢谢,我喜欢你检查所有类的方法,我可以在将来很好地使用它。快速提问,classActions
变量必须在调用它的函数中吗?这是最好的答案,因为它避免了.split()
和.search()
在其他答案中使用它们的方式:这种方式更干净。@ntgCleaner:不,可以在外部定义。您只需将函数所需的所有依赖项/值传递给它们(例如,事件目标)。嗯,我得到的未定义不是函数
错误,我已经全局声明了类操作
变量。有什么想法吗?他不应该检查-1
,因为它是零基的吗?
if ($(e.target).hasClass('person')) {
// do something
}
var classActions = {
person: function(element) { /* do something */ },
temp: function(element) { /* do something */},
// ...
};
var classes = e.target.className.split(/\s+/);
$.each(classes, function(index, cls) {
classActions[cls](e.target);
});
if(clicked.search("person") >= 0)
// "person" is in clicked