0

我有一个从标题创建工具提示的功能。我试图将此函数包装在一个 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();

});

}
});
4

3 回答 3

2

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

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

这应该使得只有具有标题属性的元素才会附加事件。

于 2012-05-02T04:48:58.320 回答
1

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

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

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

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

'if' 语句逻辑已经要求您为匹配选择器清点 DOM,因此它可能比仅将事件绑定到 #someWrapper 在计算上更昂贵。

[更新]

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

var title = $(this).attr('title');
if (title !== undefined && title !== "") { /* etc */ }
于 2012-05-02T04:48:19.267 回答
1

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

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

$('#menu-headermenu a').each(function(){
  if($(this).attr('title').length === 0){
    ...
  }
});
于 2012-05-02T04:50:32.530 回答