2012-10-29 64 views
10

我有以下代碼:jQuery的 - 獲取類元素的通過event.target屬性

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

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

     }) 
    </script> 

這將引發「未定義」例外...是否有任何其他方式來獲取類的觸發'點擊'事件的元素?先謝謝你!

+3

請注意,您不必引用'event.target',但您可能只需引用'this'。如果(this.nodeName ==「DIV」)alert($(this).attr(「class」));' – h2ooooooo

+1

嗯,使用$('*')作爲選擇器,你應該使用event.stopPropagation()你的事件回調函數,只是我的2美分。 –

回答

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')); 
}); 
13

event.target是一個DOM對象。因此,使用jQuery方法,你必須把它轉換成jQuery對象:否則

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

,你可以使用屬性className來獲取類的元素:

alert(x.className); 

順便說一句,在你的榜樣,你可能只需使用this關鍵字而不是event.target

+2

很高興能幫助理查德斯托曼,問候FSF :) – VisioN

相關問題