我有这样的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