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]();
}
}
});