2013-05-31 146 views
0

我希望能够在用户点击菜单链接时播放jQuery动画。如果锚标签包含href属性

在我的脚本中,我阻止链接的默认行为,将锚标记的href属性的值保存在变量中,播放动画,然后将窗口重定向到与保存的href值对应的URL:

<script> 
jQuery(document).ready(function($) { 
$('.main-navigation a').click(function(event) { 
    event.preventDefault(); 

    var href = this.href; 

    $('#main').slideUp(500, 
    function() { 
     window.location = href; 
    }); 
    }); 
}); 
</script> 

问题是,我的导航菜单中的某些定位标记没有href属性,因为它们唯一的功能是打开点击子菜单。当我点击这些菜单项时,动画播放,然后重新加载相同的页面。

我想从脚本的行为中排除没有href的锚定标记。

我的解决方案是只保存那些实际上具有href属性的锚定标记的href。除此之外,我不知道该怎么做。

所以,我的问题是:我应该如何用jQuery表达这个?

if (anchor tag has href attribute) { 
    var href = this.href; 
} 

或者有更好的解决方案吗?

回答

11

相反的:

$('.main-navigation a').click 

务必:

$('.main-navigation a[href]').click 

jQuery的接受所有的CSS选择器,更!

此处为Bracket Selector的信息。

+0

谢谢卡尔安德烈,这是一个非常优雅的解决方案。我现在尝试了它,它可以工作,但它让我注意到另一个我以前不知道的问题。点击当前页面的链接也会播放动画,然后重新载入相同的页面。你能告诉我,有没有办法也排除当前页面呢? –

+1

我的解决方案是将一个id或类添加到活动链接,并且click函数的第一行是'if($(this).has('#yourId or .yourClass'))return false;' –

+0

你,卡尔 - 安德烈 - 你能否向我解释一下我可以如何将课程添加到活动链接?我假设,它应该与JS完成,对吧? –

3

只需使用一个if来测试您的href的truthyness:

var href = this.href; 

if (href) { 
    $('#main').slideUp(500, 
    function() { 
     window.location = href; 
    }); 
} 
+0

大,谢谢! –

2

您的选择更改为:

$('.main-navigation a[href]').click(function(event) { 
相关问题