Czym jest ekwiwalent inny niż jQuery $(document).ready()
?
javascript
jquery
TIMEX
źródło
źródło
$(document).ready()
zdarzenie jQuery bez użycia biblioteki, spójrz na to: stackoverflow.com/questions/1795089/…$(document).ready()
- books.google.com/… . Wykorzystuje równieżaddEvent
abstrakcję wiążącą zdarzenia napisaną przez Deana Edwardsa, której kod znajduje się również w książce :)Odpowiedzi:
Zaletą
$(document).ready()
jest to, że wcześniej strzelawindow.onload
. Funkcja ładowania czeka, aż wszystko zostanie załadowane, w tym zasoby zewnętrzne i obrazy.$(document).ready
, jednak uruchamia się, gdy drzewo DOM jest gotowe i można nim manipulować. Jeśli chcesz uzyskać gotową DOM, bez jQuery, możesz zalogować się do tej biblioteki. Ktoś wydobył tylkoready
część z jQuery. Jest ładny i mały i może się przydać:już w Google Code
źródło
Działa to doskonale, od ECMA
window.onload
Nie równa się JQuery$(document).ready
bo$(document).ready
tylko czeka na drzewie DOM whilewindow.onload
sprawdzić wszystkie elementy, w tym aktywa zagraniczne i obrazów.EDYCJA : Dodano IE8 i starszy odpowiednik, dzięki obserwacji Jana Derka . Możesz przeczytać źródło tego kodu w MDN pod tym linkiem :
Istnieją inne opcje oprócz
"interactive"
. Zobacz link MDN, aby uzyskać szczegółowe informacje.źródło
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
spróbuj terazMała rzecz, którą złożyłem
domready.js
Jak tego użyć
Możesz także zmienić kontekst, w którym działa wywołanie zwrotne, przekazując drugi argument
źródło
Teraz, gdy jest rok 2018, oto szybka i prosta metoda.
Spowoduje to dodanie detektora zdarzeń, ale jeśli został już uruchomiony, sprawdzimy, czy domena jest w stanie gotowości lub czy jest kompletna. Może to zostać uruchomione przed lub po zakończeniu ładowania zasobów podrzędnych (obrazy, arkusze stylów, ramki itp.).
Dodatkowe odczyty
Aktualizacja
Oto kilka szybkich pomocników narzędziowych, korzystających ze standardowego importu i eksportu ES6, które napisałem i które zawierają także TypeScript. Może uda mi się zrobić z nich szybką bibliotekę, którą można zainstalować w projektach jako zależność.
JavaScript
Maszynopis
Obietnice
źródło
Według http://youmightnotneedjquery.com/#ready jest to miły zamiennik, który nadal działa z IE8
ulepszenia : osobiście sprawdziłbym również, czy typ funkcji
fn
jest funkcją. I jak sugeruje @elliottregan , usuń detektor zdarzeń po użyciu.Powodem, dla którego odpowiadam na to pytanie późno, jest to, że szukałem tej odpowiedzi, ale nie mogłem jej tutaj znaleźć. I myślę, że to najlepsze rozwiązanie.
źródło
Istnieje zastąpienie oparte na standardach, DOMContentLoaded, które jest obsługiwane przez ponad 90% + przeglądarek, ale nie IE8 (więc poniżej użycia kodu przez JQuery do obsługi przeglądarki) :
Natywna funkcja jQuery jest o wiele bardziej skomplikowana niż tylko window.onload, jak pokazano poniżej.
źródło
DOMContentLoaded
iload
zdarzeniaaddEventListener
, a po pierwsze, ogień usuwa oba nasłuchiwania, więc nie uruchamia się dwa razy.W zwykłym waniliowym JavaScript, bez bibliotek? To błąd.
$
jest po prostu identyfikatorem i jest niezdefiniowany, chyba że go zdefiniujesz.jQuery definiuje
$
jako swój własny „obiekt wszystkiego” (znany również jako,jQuery
dzięki czemu można go używać bez konfliktu z innymi bibliotekami). Jeśli nie używasz jQuery (lub innej biblioteki, która go definiuje), to$
nie zostanie zdefiniowane.A może pytasz, jaki jest odpowiednik zwykłego JavaScript? W takim przypadku prawdopodobnie chcesz
window.onload
, co nie jest dokładnie równoważne, ale jest najszybszym i najłatwiejszym sposobem, aby zbliżyć się do tego samego efektu w waniliowym JavaScript.źródło
Najłatwiejszym sposobem w najnowszych przeglądarkach byłoby użycie odpowiednich GlobalEventHandlers , onDOMContentLoaded , onload , onloadeddata (...)
Zdarzenie DOMContentLoaded jest uruchamiane, gdy początkowy dokument HTML został całkowicie załadowany i przeanalizowany, bez oczekiwania na zakończenie ładowania arkuszy stylów, obrazów i podramek. Zupełnie inne ładowanie zdarzeń powinno być używane tylko do wykrywania w pełni załadowanej strony. Bardzo popularnym błędem jest użycie obciążenia, w którym DOMContentLoaded byłby znacznie bardziej odpowiedni, więc bądź ostrożny.
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
Użyta funkcja jest IIFE, bardzo przydatna w tym przypadku, ponieważ wyzwala się, gdy jest gotowa:
https://en.wikipedia.org/wiki/Immed natychmiast-invoked_function_expression
Oczywiście bardziej odpowiednie jest umieszczenie go na końcu każdego skryptu.
W ES6 możemy również napisać go jako funkcję strzałki:
Najlepiej jest użyć elementów DOM, możemy poczekać, aż dowolna zmienna będzie gotowa, która wyzwoli IIFE ze strzałką.
Zachowanie będzie takie samo, ale przy mniejszym wpływie na pamięć.
W wielu przypadkach obiekt dokumentu jest również wyzwalany, gdy jest gotowy , przynajmniej w mojej przeglądarce. Składnia jest wtedy bardzo ładna, ale wymaga dalszych testów zgodności.
źródło
Body onLoad może być również alternatywą:
źródło