Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript开关语句,如果字符串包含子字符串_Javascript_Jquery - Fatal编程技术网

javascript开关语句,如果字符串包含子字符串

javascript开关语句,如果字符串包含子字符串,javascript,jquery,Javascript,Jquery,我试图找出如何执行switch语句,其中我需要找到对象的类名,然后根据类名(在switch语句中)执行某些操作 在本例中,我需要switch语句在类包含特定单词(如“person”)时执行我需要的任何操作 html 不能保证switch语句名(如“person”)会在第一个位置 我知道我可以在数组中搜索特定的单词,但我不知道如何将其添加到这类内容中。您需要使用.split()和.indexOf()的组合。您的代码如下所示: var clicked = $(e.target).attr('clas

我试图找出如何执行switch语句,其中我需要找到对象的类名,然后根据类名(在switch语句中)执行某些操作

在本例中,我需要switch语句在类包含特定单词(如“person”)时执行我需要的任何操作

html

不能保证switch语句名(如“person”)会在第一个位置


我知道我可以在数组中搜索特定的单词,但我不知道如何将其添加到这类内容中。

您需要使用.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