假設我們有一個IMG
(id
更少)元素,它具有usemap="#hotmap"
屬性。然後,我們有這個<MAP name="hotmap">
元素(在BODY
中)包含大量的AREA
(比如> 1000)。很明顯,我們希望將事件處理AREA
s委託給MAP
元素,而不是創建數百個事件監聽器。如何從MAP的eventhandler函數中獲取對IMG元素的引用?
現在在事件處理函數中(對於MAP
),我們想要參考IMG
,它使用MAP
來觸發事件。但MAP
是BODY
和IMG
元素不能有HTML,因此MAP
不能在它的子元素之中。所以問題是,我們怎麼能在這個事件處理程序中捕捉到IMG
?
一個簡單的例子:
<img src="some_image.png" usemap="#hotmap" />
...
<map id="map" name="hotmap">
<area shape="circle" coords="100,100,50" />
...
</map>
map.addEventListener('click', function (e) {
var area = e.target,
image = ?; // How to refer the img
...
}, false);
旁註
我工作的一個HTA項目,我需要動態地創建並具有一定的圖像分配hotmaps對象自定義屬性。該對象從外部文件中獲取AREA
的數據,並且一切工作正常,除了這一點細節外。現在,我將添加一個自定義屬性,其中包含對「用戶」IMG
的引用,對每個AREA
都有引用。儘管這是不必要的,但如果它只能在事件處理程序中完成一次。
編輯
現場演示在jsFiddle,(包括不HTA,在任何(?)現代瀏覽器的工作原理)
編輯II
我才意識到,我不能重複使用MAP
,因爲它也可以根據IMG
調整大小。所以我把IMG
的參考號碼改爲MAP
而不是AREA
。
雖然這解決了我的問題,我還是想知道,如何讓IMG
在事件處理程序,只是一般。建議querySelector()
解決方案似乎不工作(與它較早的下跌,現在它返回undefined
)
可以請你發佈完整的標記方含圖像和地圖開始標籤。 –
@ Dr.Molle它過於龐大,張貼在這裏,但我工作的一個的jsfiddle剛纔。這需要一段時間,因爲我必須將HTA文件操作的結果轉換爲數組才能在常規HTML頁面中工作。 – Teemu
編輯後我不再需要它了,對不起。當您使用具有多個圖像的地圖時,標記不相關。 –