おそらく、target
イベントのプロパティを使用するための最良の方法です。デフォルトでは、これは jQuery 以外のオブジェクトを返しますが、これは特に有用ではありませんが、ラップすることで$()
この問題を解決できます。
$(function() {
$(document).bind('click', function(event) {
var element = $(event.target);
alert(element.height()); // Get height
alert(element.attr('id')); // Get ID attribute
// ...
});
});
現在のメソッドを修正したい場合は、ハンドラー内で、 、およびフレンドclick()
を使用してその要素のプロパティにアクセスできます。.attr()
$(function() {
$('*').bind('click', function(event) {
alert($(this).height()); // Get height
alert($(this).attr('id')); // Get ID attribute
// ...
});
});
$(this)
関数のスコープ内で、クリックされた要素を参照します。属性を返す関数のリストが、jQuery ドキュメントのこことここにあります。$.attr('id')
特に要素の ID を$.data()
返し、属性を返しdata-*
ます。
親要素の属性を取得するには、単純に$(this).parent()
. たとえば、クリックされた要素を含むフォームの ID を取得するには、 を使用します$(this).closest('form').attr('id');
。すべてがクリックされた要素 ( ) に関連しているため、 DOM トラバーサル関数$(this)
を使用するだけで済みます。
ただし、使用$('*').bind()
は非常に非効率的です。実際には(jQuery 1.7+)でイベントを委任する必要があるときに、ページ上のすべての要素にイベント ハンドラーをバインドしています。.on()
$(function() {
$('body').on('click', '*', function(event) {
alert($(this).height()); // Get height
alert($(this).attr('id')); // Get ID attribute
// ...
});
});
このアプローチでは、ページ上のすべての要素に<body>
イベントをバインドするのではなく、 1 つのイベントのみをバインドします。