jQuery.noConflict i $ - fajny trick
Posted by Piotr Sarnacki Tue, 18 Sep 2007 11:46:00 GMT
Dzisiaj króciutko: fajny trick podpatrzony gdzieś w skryptach jQuery.
Pisząc skrypty najlepiej robić to tak, żeby można było je uruchamiać na każdej stronie. Nie mogą się gryźć z innymi bibliotekami. Dlatego jQuery wprowadziło funkcję:
jQuery.noConflict();
Po jej wywołaniu kontrola $ jest zwracana bibliotece, która wcześniej go używała. Dzięki temu można używać jQuery w połączeniu z innymi bibliotekami, a nawet ze starszymi wersjami jQuery (bardzo przydatne przy pisaniu widgetów). Minusem jest konieczność pisania jQuery zamiast $. Można oczywiście przypisać jQuery na krótszą zmienną, ale wtedy ciężej jest wklejać kod napisany przez innych.
Aby temu zaradzić wystarczy użyć takiej konstrukcji:
(function($) {
//tutaj można używać $ bez strachu o konflikt
})(jQuery);
Stworzona zostaje funkcja, która jest od razu wywołana z podanym argumentem. I voilla :)


Ba, można nawet krócej:
(function($){ //... })(jQuery.noConflict())Choć i tak chyba 99% przypadków używa sie jQuery w $(document).ready(). W takim przypadku można użyć:jQuery.noConflict() jQuery(function($){ //... })Zresztą ten drugi przykład też przekombinowany. Można tak: jQuery.noConflict()(function($){ //... })
Zapomniałem odpowiednio otagować kod. Szkoda że nie masz tu możliwości edycji komentarzy.
Można też tak, aczkolwiek kod podany przeze mnie jest fajniejszy przy pisaniu pluginów. Można wtedy założyć, że jQuery jest już załadowane i na 100% istnieje obiekt jQuery, ale nie wiadomo czy przypadkiem $ nie obsługuje jakiejś innej biblioteki. Nie ma wtedy potrzeby wywoływania noConflict parę razy. Podpatrzyłem coś takiego w jQuery UI :)