jQuery - 通过event.target属性获取元素的类

时间:2012-10-29 12:04:15

标签: javascript jquery css class

我有以下代码:

    <script type="text/javascript">
       $("*").click(function(event){
         var x = event.target;

         if (x.nodeName == "DIV"){                  
           alert(x.attr("class"));
         }

       })
    </script>

这会抛出一个'undefined'异常......有没有其他方法来获取触发'click'事件的元素类?提前谢谢!

2 个答案:

答案 0 :(得分:13)

event.target是一个DOM对象。因此,要使用jQuery方法,必须将其转换为jQuery对象:

alert($(x).attr("class"));

否则,您可以使用属性className来获取元素的类:

alert(x.className);

顺便说一下,在您的示例中,您只需使用this关键字而不是event.target

答案 1 :(得分:4)

jQuery提供一些语法糖来帮助您进行检查 - .is()允许您针对任何其他有效选择器验证元素:

var $target = event.target;
if ($target.is('div')){
  alert($target.attr('class'));
}

还有一些需要考虑的进一步变化:

  • .click(handler)被明确分配给匹配的元素(在您的情况下为每个元素)。这增加了开销;此处理程序也不会应用于执行处理程序分配后动态添加的任何元素。相反,使用on()
  • 委托处理程序
  • 重构您的逻辑,以便您可以通过将选择器更改为$('div')
  • ,而不是处理每次点击并验证它,而是首先使其仅适用于div。
  • 依赖于this,这几乎就是惯例

在所有这些更改之后,代码变得更小,更具可读性:

$('div').on('click', function() {
  alert($(this).attr('class'));
});