2010-05-14 4 views
1

Я пытаюсь изменить текст в привязке при переключении. Я делаю это в данный момент, но обнаружил, что после замены анкерной метки переключение перестает работать. Может кто-нибудь объяснить, почему это происходит и какое решение? Большое спасибо.Замена текста в Toggled Anchor с помощью 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'); 
}); 

причина, почему он больше не работает, потому, что обработчики событий были потеряны, когда якорь удаляется (и заменить). Если вы хотите, чтобы ваш пример работал, вам нужно было либо переустанавливать события каждый раз, когда они были заменены, либо связывать события с использованием методовили delegate().

+0

Это объясняет это. Ваш пример отлично работает. Спасибо, что указали мне в направлении live() и делегата(), чтобы прочитать их для дальнейшего использования. – willmcneilly

+4

При настройке текста на элемент более эффективно использовать ['.text()'] (http://api.jquery.com/text/#text2), а не '.html()', поскольку jQuery будет сначала проверьте содержимое html для HTML перед применением. Аналогично, с простым DOM, более эффективно использовать 'innerText' /' textContent', чем 'innerHTML', потому что' innerHTML' будет вызывать парсер HTML. –

+0

@ У Энди Е в голову спасибо за наконечник. Я изменился на .text() – willmcneilly

Смежные вопросы