我有這樣的jQuery代碼:
$('*').mouseover(function()
{
$('#log').text($(this)[0].tagName);
});
並在我的網頁,我有一大堆的元素,並用ID 「日誌」 一個DIV。當用戶將鼠標移到任何元素上時,我希望他們的元素名稱(例如p
或h2
)出現在#log
中。但是每當我將鼠標懸停在任何東西上時,它都會返回HTML
。我該如何解決?
我有這樣的jQuery代碼:
$('*').mouseover(function()
{
$('#log').text($(this)[0].tagName);
});
並在我的網頁,我有一大堆的元素,並用ID 「日誌」 一個DIV。當用戶將鼠標移到任何元素上時,我希望他們的元素名稱(例如p
或h2
)出現在#log
中。但是每當我將鼠標懸停在任何東西上時,它都會返回HTML
。我該如何解決?
嘗試:
$('*').mouseover(function(evt)
{
$('#log').text($(this)[0].tagName);
evt.stopPropagation();
});
你的問題,我認爲,是直到它擊中<html>
而這也正是它停止的情況下被向上傳播鏈。這應該有所幫助。
編輯:它也可能有助於縮小範圍,即$('#container > *')
。
這是因爲這些事件都在冒着高達html
的地方被處理。
嘗試......
$(document).mouseover(function(event) {
$('#log').text(event.target.tagName);
});
現在只連接一個事件,讓他們都冒泡到document
他們將在那裏進行處理。
隨機downvote或有代碼的問題? – alex 2011-04-07 15:04:16
試試這個:
$('*').bind('mouseover', function(e) {
e.stopPropagation();
$('#log').text($(this)[0].tagName);
}
文檔的第一個元素是HTML標記。所以它會得到第一個懸停命令。查閱 - 至少 - 爲身體元素。
問題是你的事件冒泡到html DOM節點......你不想要這個。這將解決這個問題:
$('*').mouseover(function(e){
e.stopPropagation();
$('#log').text(this.tagName);
});
我創建了一個小提琴,以幫助您:http://jsfiddle.net/ErickPetru/NQfZh/
正如你所看到的,我建議你使用mouseenter
insted的,那麼事件傳播將不會是一個問題。如果您使用mouseover
,則鼠標始終會在每個元素及其父母上觸發此事件。
另外,.attr("tagName")
更好,因爲您不需要任何[0]
索引。
請注意'$(this)[0]'完全等同於'this',但速度較慢。 – nickf 2011-04-07 14:31:56