Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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 jQuery将单个类与元素具有多个类的预定义列表相匹配_Javascript_Jquery_Event Handling - Fatal编程技术网

Javascript jQuery将单个类与元素具有多个类的预定义列表相匹配

Javascript jQuery将单个类与元素具有多个类的预定义列表相匹配,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我试图找出是否有办法多次执行.hasClass(),以查看我正在使用的活动元素是否具有当前四个特定类中的一个,我还试图找出在充当触发器(或活动元素)的元素执行此操作时最优化的方法其中包含多个类,主要用于样式设置 HTML的示例: <div class="form_row"> <div class="primary_row">1</div> </div> <div class="form_row"> <div cla

我试图找出是否有办法多次执行
.hasClass()
,以查看我正在使用的活动元素是否具有当前四个特定类中的一个,我还试图找出在充当触发器(或活动元素)的元素执行此操作时最优化的方法其中包含多个类,主要用于样式设置

HTML的示例:

<div class="form_row">
    <div class="primary_row">1</div>
</div>
<div class="form_row">
    <div class="primary_row subexists">1</div>
    <div class="primary_row_sub">1a</div>
</div>
<div class="form_row">
    <div class="primary_row subexists">1</div>
    <div class="primary_row_sub subexists">1a</div>
    <div class="secondary_row">2</div>
</div>
<div class="form_row">
    <div class="primary_row subexists">1</div>
    <div class="primary_row_sub subexists">1a</div>
    <div class="secondary_row subexists">2</div>
    <div class="secondary_row_sub">2a</div>
</div>
在这个单击处理程序中,我希望能够检测单击的元素是否是上述四个元素之一。如果是的话,我想根据它做点什么。所以,确定哪个类是被单击的元素,而不是为每种类型构建四个单击处理程序。我希望我可以保持它的优化和包含到一个单一的处理程序。有什么想法吗?

一个选项:

if ($(this).is(".primary_row")) {
    ...
} elseif ($(this).is(".primary_row_sub")) {
    ...
} and so on
var classMap = {"one": function () { alert("one");}, 
                "two": function () { alert("two");},
                "three": function () { alert("three");} 
               }
,   classes = "";

$('div').click(function (e) {
    classes = this.className.split(" ");
    for (key in classMap) {
        if ($.inArray(key, classes) !== -1) {
            classMap[key]();
        }   
    }
});

实际上并不比使用
.hasClass
更好,是吗?@Blazemonger说得对。但短了几个字符。:)
.is
.hasClass
慢得多。(“很多”是不值得注意的,因为浏览器速度很快,但仍然如此。)为什么不在所有这些元素中再添加一个类,并确定该类呢?@Blazemonger在我对你答案的评论中遇到了同样的问题。你知道,我实际上也在想类似的事情。。我无法想象从这个想法中激发出的功能。我可以用这样的函数调用传递参数,对吗?我还应该做一个
typeof==“function”
还是为了安全起见?我刚刚做了一个工作演示。是的,您可以传递参数。我会尝试添加更多的内容。好吧,这肯定会让我开始,我很感激。
var classMap = {"one": function () { alert("one");}, 
                "two": function () { alert("two");},
                "three": function () { alert("three");} 
               }
,   classes = "";

$('div').click(function (e) {
    classes = this.className.split(" ");
    for (key in classMap) {
        if ($.inArray(key, classes) !== -1) {
            classMap[key]();
        }   
    }
});