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 :)

Posted in  | Tags , ,  | 4 comments | no trackbacks

Comments

  1. Avatar Eluś said about 2 hours later:
    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($){
       //...
    })
  2. Avatar Eluś said about 2 hours later:

    Zresztą ten drugi przykład też przekombinowany. Można tak: jQuery.noConflict()(function($){ //... })

  3. Avatar Eluś said about 2 hours later:
    Zapomniałem odpowiednio otagować kod. Szkoda że nie masz tu możliwości edycji komentarzy.
    
    jQuery.noConflict()(function($){
       //... 
    })
    
  4. Avatar Drogomir said about 3 hours later:

    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 :)

Trackbacks

Use the following link to trackback from your own site:
http://blog.drogomir.com/articles/trackback/33

(leave url/email »)

   Comment Markup Help Preview comment