2011-08-16 51 views
5

我写一个简单的提示:这个jQuery选择器如何工作?

$(function() { 

$('a').hover(function() { 
    var curLink = $(this); 
    var toolTipText = curLink.attr('title'); 
    if (toolTipText) 
    { 
     var theOffset = curLink.offset(); 

     $('body').prepend('<div id="toolTip">'+toolTipText+'</div>');   

     // how the heck is this working??? 
     $('#toolTip').css({ 
      'left' : theOffset.left+'px', 
      'top' : theOffset.top - 30+'px' 
     });  
    } 
}, function() { 
    $('#toolTip').remove(); 
}); 

}); 

正如你可以看到一个div“工具提示”的ID,当用户将鼠标悬停在链接动态添加到DOM。当DOM加载时,最初并不存在div,但稍后添加。所以我认为我必须使用live()函数并附加一个事件。但是,如果我把它当作一个普通的选择器,它会如何工作。不是我在抱怨,但这是如何工作的?

+0

请记住,即使您不得不使用'.live()',您将不得不使用'.delegate()'而不是'.live()'。由于'.live()'将应用于整个DOM和'.delegate()'特定的DOM元素。它的性能更好。 – PeeHaa

回答

13

因为该选择器在元素位于DOM之前未运行,所以不需要生存。

  • OnMouseOver工具提示被添加到DOM中。
  • 选择器运行并从DOM中删除工具提示的选项。它工作正常,因为在调用mouseout函数时,已经通过鼠标悬停将工具提示添加到了DOM。

你只需要当您将事件使用'live()'如果您<a>元素在DOM还没有。 IE浏览器。该代码执行后添加到页面的任何锚都不会有工具提示。

0

它的工作原理是因为您在每次创建元素后调用.css()函数,因此当它触发时元素已经存在。