标题属性的自定义工具提示功能

时间:2012-05-02 04:40:26

标签: jquery

我有一个从标题创建工具提示的功能。我试图将此函数包装在if语句中,该语句在返回工具提示之前检查标题长度。但它似乎不想返回任何东西。有没有更好的方法来使用if语句执行此操作?

$(document).ready(function() {

 if ($('#menu-headermenu a').attr('title').length == 0) {

 return null;

} else {

//Select all anchor tag with rel set to tooltip
$('#menu-headermenu a').mouseover(function(e) {

    //Grab the title attribute's value and assign it to a variable
    var tip = $(this).attr('title');    

    //Remove the title attribute's to avoid the native tooltip from the browser
    $(this).attr('title','');

    //Append the tooltip template and its value
    $(this).append('<div id="tooltip"><p>Take me to:<p><div class="tooltipcontent"' + tip + '</div></div>');     

    //Set the X and Y axis of the tooltip
    $('#tooltip').css('top', e.pageY + 10 );
    $('#tooltip').css('left', e.pageX + 20 );

    //Show the tooltip with faceIn effect
    $('#tooltip').fadeIn('500');
    $('#tooltip').fadeTo('10',0.8);

}).mousemove(function(e) {

    //Keep changing the X and Y axis for the tooltip, thus, the tooltip move along with the mouse
    $('#tooltip').css('top', e.pageY + 10 );
    $('#tooltip').css('left', e.pageX + 20 );

}).mouseout(function() {

    //Put back the title attribute's value
    $(this).attr('title',$('div.tooltipcontent').html());

    //Remove the appended tooltip template
    $(this).children('div#tooltip').remove();

});

}
});

3 个答案:

答案 0 :(得分:2)

您是否考虑过使用现有解决方案? (例如http://jquery.bassistance.de/tooltip/demo/

至于您的问题,您只需在选择器中添加一个过滤器:$('#menu-headermenu a[title]')

这应该使得只有具有title属性的元素才能附加事件。

答案 1 :(得分:1)

就个人而言,在准备好文档时,我会直接绑定我的鼠标悬停功能而不进行健全性检查。如果您添加Ajax调用等,将来会更灵活:

$(document).ready(function() {
  $('#someWrapper').on('mouseover', '#menu-headermenu a', function(e) {
    // do stuff
  });
});

其中#someWrapper是任何预计包含相关锚链接的元素。它不一定是带有ID的元素,如果你需要它,它甚至可以是“正文”,尽管通常在大多数文档中都可以识别出适当的div。

所有这一切都说“嘿,#someWrapper ......听听匹配'#menu-headermenu a'的元素上发生的鼠标悬停,会不会?”

'if'语句逻辑已经要求你为匹配的选择器清点DOM,所以它可能比仅仅将事件绑定到#someWrapper更加昂贵。

[更新]

我确实错过了部分问题,但我的回答的原始部分仍然存在......在函数内部,我会在那里对标题的存在或标题的空字符串进行完整性检查。< / p>

var title = $(this).attr('title');
if (title !== undefined && title !== "") { /* etc */ }

答案 2 :(得分:1)

假设你不能只使用[title] ......

您需要将if检查包装在每个语句中。

$('#menu-headermenu a').each(function(){
  if($(this).attr('title').length === 0){
    ...
  }
});