2012-03-30 11 views
5

Których metod jQuery należy unikać na rzecz wbudowanych metod/właściwości?Kiedy stosować metody opakowujące jQuery zamiast wbudowanych metod javascript?

Przykład:

$('#el').each(function(){ 

    // this.id vs $(this).attr('id'); 
    // this.checked vs $(this).is(':checked'); 

});; 
+2

Dlaczego każdy uniknąć? Zainwestowano tysiące roboczogodzin, aby zapewnić zgodność z różnymi przeglądarkami. – Sparky

+0

No tak, ale niektóre z nich to tylko opakowania na rzeczy, które najprawdopodobniej nie ulegną zmianie w javascript – Alex

+0

Domyślam się, że po prostu próbuję znaleźć źródło tego, dlaczego o to pytasz. Czy masz z czymś problem? – Sparky

Odpowiedz

1

Jest to szerokie zagadnienie, ale oto kilka wskazówek, które moim zdaniem są przydatne. Możesz/powinien używać natywnych metod js, gdy:

  1. Wiesz co robisz. To znaczy, że znasz specyfikację i wszelkie możliwe niespójności między przeglądarkami.
  2. Piszesz o kluczowym znaczeniu dla wydajności, gdzie wygoda nie jest najwyższym priorytetem.
  3. Nie jesteś zadowolony z działania funkcji bibliotecznej. To może rozbić na następujące kwestie: realizacja
    • biblioteka jest wadliwy (to zdarza)
    • realizacja biblioteka jest niekompletny (np nie obsługuje jeszcze kilka nowych funkcji, które są OK, aby zastosować w danym przypadku)
    • prostu Twoja wizja jakiejś funkcji różni się od implementacji biblioteki

pierwszym warunkiem powinno być prawdziwe w każdym razie :) Pozostali mogą łączyć lub iść osobno. Rozumiem, że wszystkie są dyskusyjne i mogą prowokować długie rozmowy na temat filozofii, ale myślę, że są one dobrym punktem wyjścia i podsumowują wiele przypadków.

Ale najważniejsze jest - , jeśli nie masz powodu, aby unikać metod bibliotecznych, użyj ich!

3

używam bezpośredniego właściwość javascript jak this.id w następujących przypadkach:

  1. Kiedy to robi dokładnie to, co chcę.
  2. Gdy prędkość jest ważna.
  3. Gdy we wszystkich przeglądarkach dbam o wsparcie dokładnie to, czego potrzebuję.

używam metody dostępu jQuery, gdy:

  1. Istnieje krzyż kwestie wsparcia przeglądarka albo nie jestem pewien, że nie są to kwestie dla wielu przeglądarek.
  2. Gdy ścieżka jQuery ma więcej lub ulepszoną funkcjonalność, która jest przydatna w moich okolicznościach.
  3. Gdy jest częścią połączonej operacji, a łańcuchowanie działa lepiej z jQuery.
  4. Kiedy już używam jQuery dla tej operacji i wydaje się niespójne, aby połączyć/dopasować jakiś dostęp bezpośredni i dostęp do jQuery.

Na przykład: str = $(elem).html() tak naprawdę nie ma żadnych zalet w stosunku str = elem.innerHTML, ale $(elem).html(str) ma kilka zalet w stosunku elem.innerHTML = str; ponieważ metoda jQuery będzie oczyścić przedmioty, które usuwane są pełniej niż sposób innerHTML.

+0

Jak na ironię 'href' jest jednym z przykładów, w którym jQuery ** robi ** coś dla ciebie (przeglądarki różnią się od tego, czy względny adres URL w atrybucie' href' jest w pełni kwalifikowany czy nie w właściwości 'href'). Ponadto atrybuty boolowskie są właśnie tym, co jQuery ma źle, w kółko. * "jQuery już zdezynfekował wartość do wartości logicznej" *: nie, boolean już istnieje jako właściwość 'checked' i działa niezawodnie we wszystkich głównych przeglądarkach od IE 4. Wystarczy użyć' this.checked' (i podobnie dla wszystkie pozostałe atrybuty boolowskie). To jest lepsze niż alternatywa jQuery pod każdym względem. –

+0

Zobacz także http://whattheheadsaid.com/2010/10/utilizing-the-awiryczne-przypomnij-do -programu-nie-ułatwienia- –

+0

@TimDown - Oczyściłem przykłady. – jfriend00

1

Większość właściwości DOM jest bezproblemowa we wszystkich głównych przeglądarkach. W przypadku dwóch przykładów, o których wspominasz (id i checked), właściwości DOM są w 100% niezawodne i powinny być używane zamiast równoważnika jQuery w celu zapewnienia niezawodności, wydajności i czytelności.

To samo dotyczy wszystkich właściwości odpowiadających atrybutom boolean: readonly, disabled, selected są typowe. Here are some more. className jest również w 100% stały. W przypadku innych właściwości i atrybutów zależy to od Ciebie. Korzystanie z biblioteki takiej jak jQuery może być dla nich najlepszym rozwiązaniem, jeśli nie masz pewności i możesz sobie pozwolić na utratę wydajności (zwykle w tym przypadku).

przepełnienie stosu regularne Andy Earnshaw ma blogu o tym: http://whattheheadsaid.com/2010/10/utilizing-the-awesome-power-of-jquery-to-access-properties-of-an-element

+0

wow ponad 20 operacji, aby uzyskać identyfikator :) – Alex

Powiązane problemy