HTML/XMLが次のようになっていると仮定します
<ul class="someClass">
<li><img src="/some/path" /></li>
<li><img src="/some/path" /></li>
</ul>
jQuery 1.7以降を使用すると、次のようなことができます
$('ul.someClass').on( 'click', 'img', function( event ) {
var imgElement = this;
$(imgElement).hide();
});
上記のJavaScriptコードでは、はすべての画像要素ul.someClass
の共通の親を参照し、ハンドラーをトリガーする要素を参照します。ハンドラー自体では、変数はイベントをトリガーした要素に設定され、あなたの場合は要素を参照します。このコードは、非常に強力で便利なイベント委任を使用します。img
this
img
jQuery 1.4以降(もちろん1.7より前)を使用している場合は、次のように実行できます。
$('ul.someClass').delegate( 'img', 'click', function( event ) {
var imgElement = this;
$(imgElement).hide();
});
お使いのバージョンが1.4より前の場合は、更新する必要があります。または、次のように行うことができます。
$('ul.someClass').find('img').bind('click', function( event ) {
var imgElement = this;
$(imgElement).hide();
});
このスニペットはイベント委任を使用しません。
jQueryをまったく使用しない場合は、次のようにすることができます(動作するデモ
http://jsfiddle.net/pomeh/u6etD/):
function hideElement( element ) {
// code to hide "element" variable
}
function hideImageHandler( event ) {
var target = event.target || event.srcElement;
// make sure the click happened on an <img /> element
if ( target && target.nodeType === 1 && target.tagName.toLowerCase() === 'img' ) {
hideElement( target );
}
}
var ul = document.getElementsByTagName('ul')[0];
if ( ul.addEventListener ) {
ul.addEventListener( 'click', hideImageHandler, false );
}
else if ( ul.attachEvent ) {
ul.attachEvent( 'onclick', hideImageHandler);
}