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