2011-04-07 69 views
1

我有这样的jQuery代码:

$('*').mouseover(function() 
    { 
     $('#log').text($(this)[0].tagName); 
    }); 

并在我的网页,我有一大堆的元素,并用ID “日志” 一个DIV。当用户将鼠标移到任何元素上时,我希望他们的元素名称(例如ph2)出现在#log中。但是每当我将鼠标悬停在任何东西上时,它都会返回HTML。我该如何解决?

+7

请注意'$(this)[0]'完全等同于'this',但速度较慢。 – nickf 2011-04-07 14:31:56

回答

6

尝试:

$('*').mouseover(function(evt) 
{ 
    $('#log').text($(this)[0].tagName); 

    evt.stopPropagation(); 
}); 

你的问题,我认为,是直到它击中<html>而这也正是它停止的情况下被向上传播链。这应该有所帮助。

编辑:它也可能有助于缩小范围,即$('#container > *')

2

这是因为这些事件都在冒着高达html的地方被处理。

尝试......

$(document).mouseover(function(event) { 
    $('#log').text(event.target.tagName); 
}); 

现在只连接一个事件,让他们都冒泡到document他们将在那里进行处理。

+0

随机downvote或有代码的问题? – alex 2011-04-07 15:04:16

2

试试这个:

$('*').bind('mouseover', function(e) { 
    e.stopPropagation(); 
    $('#log').text($(this)[0].tagName); 
} 
0

文档的第一个元素是HTML标记。所以它会得到第一个悬停命令。查阅 - 至少 - 为身体元素。

-1

您通过选择“*”将此事件处理程序附加到任意 DOM元素。 如果没有event.stoppropagation()...每个动作都被路由到(向上!)html。

尝试

$('*', 'body').mouseover(function() 
{ 
    $('#log').text($(this)[0].tagName); 
}); 

这限制了标签的检测,包含在身体的元件。

+2

这仍然会起泡到任何直接身体下的元素。我想他想要你徘徊的特定元素,所以你需要完全停止传播 – brad 2011-04-07 14:38:00

+0

,brad。谢谢! – HBublitz 2011-04-07 15:19:57

1

问题是你的事件冒泡到html DOM节点......你不想要这个。这将解决这个问题:

$('*').mouseover(function(e){ 
    e.stopPropagation(); 
    $('#log').text(this.tagName); 
}); 
0

我创建了一个小提琴,以帮助您:http://jsfiddle.net/ErickPetru/NQfZh/

正如你所看到的,我建议你使用mouseenter insted的,那么事件传播将不会是一个问题。如果您使用mouseover,则鼠标始终会在每个元素及其父母上触发此事件。

另外,.attr("tagName")更好,因为您不需要任何[0]索引。