这个jQuery选择器到底是如何工作的?

这个jQuery选择器到底是如何工作的?,jquery,dom,Jquery,Dom,我正在写一个简单的工具提示: $(function() { $('a').hover(function() { var curLink = $(this); var toolTipText = curLink.attr('title'); if (toolTipText) { var theOffset = curLink.offset(); $('body').prepend('<div id="toolTip">

我正在写一个简单的工具提示:

$(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(); 
});

});
$(函数(){
$('a')。悬停(函数(){
var curLink=$(此值);
var toolTipText=curLink.attr('title');
如果(工具文字)
{
var theOffset=curLink.offset();
$('body')。前缀(“”+toolTipText+“”);
//这到底是怎么回事???
$(“#工具提示”).css({
'left':theOffset.left+'px',
'top':theOffset.top-30+'px'
});     
}   
},函数(){
$(“#工具提示”).remove();
});
});

正如您所看到的,当用户将鼠标悬停在链接上时,id为“toolTip”的div会动态添加到DOM中。当DOM加载时,该div最初不在那里,但会在以后添加。因此我假设我必须使用
live()
函数并向其附加一个事件。但是如果我把它当作一个常规的选择器,它是如何工作的呢。我不是在抱怨,但这是如何工作的?

您不需要live,因为在元素进入DOM之前,选择器不会运行

  • OnMouseOver工具提示被添加到DOM中
  • 在mouseout中,选择器将运行,工具提示将从DOM中删除。它工作得很好,因为在调用mouseout函数时,mouseover已经将工具提示添加到DOM中

如果附加事件时
元素还不在DOM中,则只需要使用
'live()'
。例如,在代码执行后添加到页面中的任何锚都不会有工具提示。

它可以工作,因为每次创建元素后都会调用.css()函数,因此当它触发元素时,元素已经存在。

请记住,即使必须使用
.live()
也必须使用
.delegate()
而不是
.live()
。因为
.live()
将应用于整个DOM和
.delegate()
特定的DOM元素。它的性能更好。