Czy wszystkie zdarzenia jquery powinny być powiązane z $ (dokument)?

Skąd to pochodzi

Kiedy po raz pierwszy nauczyłem się jQuery, zwykle dołączałem takie wydarzenia:

$('.my-widget a').click(function() {
    $(this).toggleClass('active');
});

Po dowiedzeniu się więcej o szybkości selektora i delegowaniu zdarzeń przeczytałem w kilku miejscach, że „delegacja jQuery sprawi, że kod będzie szybszy”. Zacząłem więc pisać taki kod:

$('.my-widget').on('click','a',function() {
    $(this).toggleClass('active');
});

Był to również zalecany sposób replikowania zachowania przestarzałego zdarzenia .live (). Co jest dla mnie ważne, ponieważ wiele moich witryn dynamicznie dodaje / usuwa widżety przez cały czas. Powyższe nie zachowuje się dokładnie tak jak .live (), ponieważ tylko elementy dodane do już istniejącego kontenera „.my-widget” będą zachowywać się. Jeśli dynamicznie dodam kolejny blok html po uruchomieniu tego kodu, elementy te nie będą wiązały zdarzeń z nimi związanych. Lubię to:

setTimeout(function() {
    $('body').append('<div class="my-widget"><a>Click does nothing</a></div>');
}, 1000);


Co chcę osiągnąć:stare zachowanie .live () // oznaczające dołączanie zdarzeń do jeszcze nieistniejących elementówkorzyści z .on ()najszybsza wydajność do wiązania wydarzeńProsty sposób zarządzania wydarzeniami

Dołączam teraz wszystkie takie wydarzenia:

$(document).on('click.my-widget-namespace', '.my-widget a', function() {
    $(this).toggleClass('active');
});

Który wydaje się spełniać wszystkie moje cele. (Tak, z jakiegoś powodu jest wolniejszy w IE, nie wiem dlaczego?) Jest szybki, ponieważ tylko pojedyncze zdarzenie jest powiązane z pojedynczym elementem, a selektor dodatkowy jest oceniany tylko wtedy, gdy zdarzenie wystąpi (proszę poprawić mnie, jeśli jest to błędne). Przestrzeń nazw jest niesamowita, ponieważ ułatwia przełączanie nasłuchiwania zdarzeń.

Moje rozwiązanie / pytanie

Zaczynam myśleć, że zdarzenia jQuery powinny zawsze być powiązane z $ (dokument).
Czy jest jakiś powód, dla którego nie chcesz tego robić?
Czy można to uznać za najlepszą praktykę? Jeśli nie, dlaczego?

Jeśli przeczytałeś to wszystko, dziękuję. Doceniam wszelkie / wszystkie opinie / spostrzeżenia.

Założenia:

Używanie jQuery, które obsługuje.on() // co najmniej wersja 1.7Chcesz, aby wydarzenie zostało dodane do dynamicznie dodanej zawartości

Odczyty / Przykłady:

http://24ways.org/2011/your-jquery-now-with-less-suckhttp://brandonaaron.net/blog/2010/03/4/event-delegation-with-jqueryhttp://www.jasonbuckboyer.com/playground/speed/speed.htmlhttp://api.jquery.com/on/

questionAnswers(2)

yourAnswerToTheQuestion