多个选择器:识别触发器?

时间:2010-11-30 14:57:30

标签: javascript jquery-selectors jquery

这是一个我无法弄清楚的非常小的问题。我相信有人可以立即回答:

有多个选择器,如

$('a.button, span.xyz, a.another').click(function(e) {
   var clicked_element = ???;
});

,如何确定实际点击了哪个选择器?我需要像$(clicked_element)...一样使用它。

感谢。

3 个答案:

答案 0 :(得分:6)

使用$(this)将获得被点击的元素..并且使用is()可以帮助您确定点击的内容。

$('a.button, span.xyz, a.another').click(function(e) {
   if ($(this).is("a.button")) {
     alert("a.button was clicked");
   } else if ($(this).is("span.xyz")) {
     alert("span.xyz was clicked");
   } else if($(this).is("a.another")) {
     alert("a.another was clicked);
   }
});

<强>编辑:

当我写下这个答案时,似乎有一个更好的方法。 Patrick DW的评论引起了我的兴趣,我想知道更多。他的澄清是jQuery - Issues with combining selectors in a single event handler

这将是一种更好的方法

$("a.button").click(function (e) { ... });
$("span.xyz").click(function (e) { ... });
$("a.another").click(function (e) { ... });

据我了解,如果您的目标是将常用功能放在一个位置,那么这就应该如何处理

function commonFunctionality(elementSelector) {
   // common code for all elements here or at the end

   switch (elementSelector) {
     case "a.button":
       //do stuff for a.button only;
       break;
     case "span.xyz":
       //do stuff for span.xyz only;
       break;
     case "a.another":
       //do stuff for a.another only;
       break;
   }

   // common code for all elements
}


$("a.button").click(function (e) { ... });
$("span.xyz").click(function (e) { ... });
$("a.another").click(function (e) { ... });

答案 1 :(得分:2)

触发事件的元素在函数$(this)中可用,即

$('a.button, span.xyz, a.another').click(function(e) {
   var clicked_element = $(this);
});

您还可以使用is()进行测试以确定元素是否与特定选择器匹配:

if ($(this).is('a.button'))) { ... }

答案 2 :(得分:1)

我同意Patrick和Dexter关于如果这些元素具有不同功能的分离。但是,如果您打算使用此方法,请尝试使用一些内置的JavaScript方法。我不知道HTML标记是什么样的,但假设这个标记,你可以尝试下面的脚本:

<a class="button" href="http://somesite.com">Some Site</a>
<span class="xyz">span</span>
<a class="another" href="/topics/topic2.html">Topic 2</a>

$('a.button, span.xyz, a.another').click(function(e) {
   var clicked = 'a.another';
   if (this.tagName == "SPAN") { clicked = 'span.xyz'; }
   if (this.href.match('somesite')) { clicked = 'a.button'; }
   // Do something
});