2011-07-15 137 views
1

我寫了一個jQuery腳本有一個小問題。jQuery功能問題(父/子)

我有一個HTML的結構是這樣的:

<div id="navigation"> 
    <ul> 
    <li><a href="Link1"><b>Text1</b></a></li> 
    <li><a href="Link2"><b>Text2</b></a></li> 
    ... 
    </ul> 
</div> 

然後,我必須綁定到這些鋰/是將當前頁面的價值HREF一個選項卡點擊功能:

var currentpage = $(this).attr('href'); 

最後,更新函數在需要時觸發更新函數,執行許多操作,但也會更改當前選中的li/a選項卡的樣式:

$('#navigation a').each(function() 
{ 
    var tab = $(this); 
    tab.parent().toggleClass('current', (tab.attr('href') == currentpage)); 
}); 

一切工作正常,但今天我試圖重寫只有一行的最後一個函數 - 沒有調用each() - 我無法讓它工作。 我已經試過像許多解決方案:

$('#navigation a').parent().toggleClass('current', ($(this).children(':first').attr('href') === currentpage)); 

$('#navigation a').parent().toggleClass('current', ($(':only-child', $(this)).attr('href') == currentpage)); 

有人能幫助我嗎? 謝謝!

回答

3

您無法按照自己的意願重寫它。

原始代碼必須使用「.each()」,因爲它需要訪問每個單獨的元素才能完成其功能。在你的重寫中,你想象的是你可以得到this設置給每個正在處理的元素,但這並不是this在JavaScript中的工作方式。在您嘗試重寫時,在「toggleClass()」參數中的this的值將爲this,因爲它代表外部的表示整個jQuery函數調用鏈。與調用「toggleClass()」處理的<a>元素完全無關。

0

當你的函數是觸發器,即單擊該函數時,你可以通過使用$(this)來獲取對被單擊元素的引用。那麼你的代碼應該是

$(this).parent().toggleClass('current', ($(this).children(':first').attr('href') === currentpage));