2011-08-16 125 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()函數,因此當它觸發時元素已經存在。