假设您的 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);
}