jQuery $(this).tagName返回“HTML”

时间:2011-04-07 14:27:40

标签: jquery jquery-selectors

我有这个jQuery代码:

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

在我的页面中,我有一堆元素,还有一个ID为“log”的DIV。当用户将鼠标移到任何元素上时,我希望他们的元素名称(例如ph2)出现在#log中。但是每当我抓住任何东西时,它都会返回HTML。我该如何解决这个问题?

7 个答案:

答案 0 :(得分:6)

尝试:

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

    evt.stopPropagation();
});

我认为,你的问题是,事件会一直传播到链中,直到它到达<html>,并且它就会停止。这应该有帮助。

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

答案 1 :(得分:2)

这是因为事件正在冒泡到html处理它们。

试试这个......

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

现在您只附加一个事件,让它们全部冒泡到document处理它们。

答案 2 :(得分:2)

试试这个:

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

文档的第一个元素是html标记。所以它将获得第一个悬停命令。查找 - 至少 - 身体元素。

答案 5 :(得分:0)

我创建了一个小提琴来帮助你:http://jsfiddle.net/ErickPetru/NQfZh/

如您所见,我建议您使用mouseenter insted,然后事件传播不会成为问题。如果您使用mouseover,鼠标将始终在每个元素及其父元素上触发此事件。

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

答案 6 :(得分:-1)

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

尝试

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

将标签检测限制在正文中包含的元素。