2010-05-14 69 views
1

我試圖改變切換中的錨點中的文本。我現在正在這樣做,但發現一旦錨標記取代了切換不再起作用。有人可以解釋爲什麼會發生這種情況和解決方案嗎?非常感謝。用JQuery替換切換的錨中的文本

$('a#toggleHeader').toggle(function() { 
    $('#header-wrapper').slideUp(); 
    $(this).replaceWith('< href=\"#\" id="toggleHeader">Show Header</>'); 

//注:我移動錨點,因爲我只能發佈一個錨定爲一個新的用戶

},function(){ 
    $('#header-wrapper').slideDown(); 
    $(this).replaceWith('<a href=\"#\" id="toggleHeader">Hide Header</a>'); 

}); 

回答

5

簡單地改變,而不是更換整個事情錨的內容,:

$('a#toggleHeader').toggle(function() { 
    $('#header-wrapper').slideUp(); 
    $(this).text('Show Header'); 
}, function() { 
    $('#header-wrapper').slideDown(); 
    $(this).text('Hide Header'); 
}); 

它不再工作的原因是因爲事件處理程序在錨被移除(替換)時丟失了。如果您希望您的示例能夠工作,則需要在每次更換時重新綁定事件,或使用live()delegate()方法綁定事件。

+0

這就解釋了它。你的例子完美地工作。感謝您指向live()和delegate()的方向,以便將來閱讀它們以供將來參考。 – willmcneilly 2010-05-14 11:21:22

+4

在元素上設置文本時,使用['.text()'](http://api.jquery.com/text/#text2),而不是'.html()'會更有效率,因爲jQuery會首先在申請前檢查HTML的HTML內容。與純DOM相似,使用'innerText' /'textContent'比'innerHTML'更有效,因爲'innerHTML'將調用HTML解析器。 – 2010-05-14 11:27:38

+0

@Andy E的頭感謝提示。我已更改爲.text() – willmcneilly 2010-05-14 12:51:54