2013-05-31 191 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) { 
相關問題