这个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元素。它的性能更好。