$ (Belge). Zaten gerekli mi?


111

Bu soruyu stackoverflow'da gördüm ancak yanıtlandığını hiç düşünmüyorum.

$(document).readygerekli?

Tüm javascript'lerimi sayfanın alt kısmına bağlarım, böylece teoride hepsi belge hazır olduktan sonra çalışır.


3
Daha eski tarayıcılar, daha yeni tarayıcıların kullandığı paralel indirmeden yararlanamayabilir. Komut dosyalarınızın en alta yerleştirilmesinin ana nedeni budur. Özellikle HTML ve CSS'nizin eski tarayıcılarda ilk olarak oluşturulmasına izin verir. Bu noktada, DOM'un yüklendiğini algılamayı nasıl başarmak istediğinize karar verebilirsiniz. J'lerinizi başlatmak için iki popüler yöntem, window.onload ve $ (document) .ready (jQuery ile birlikte). Başka seçenekler de var ve kolayca aranabilir, window.onload için bariz dezavantajlar. Önemli olan $ (belge) .Hazırda işe yaramıyor ve kullanımı kolay.
BradChesney79

Yanıtlar:


125

$(document).readygerekli?

Hayır

tüm komut dosyalarınızı </body>kapanış etiketinin hemen öncesine yerleştirdiyseniz , tam olarak aynı şeyi yapmışsınızdır.

Ek olarak, komut dosyasının DOM'a erişmesi gerekmiyorsa, diğer komut dosyalarına olası bağımlılıkların ötesinde nerede yüklendiği önemli değildir.

Çoğu CMS için, komut dosyalarının nereye yükleneceği konusunda fazla seçeneğiniz yoktur, bu nedenle document.readyolayı kullanmak için modüler kod için iyi bir biçimdir . Başka bir yerde tekrar kullanırsanız, gerçekten geri dönüp eski kodu hatalarını ayıklamak istiyor musunuz?

konu dışı:

Bir yan not olarak: takma adı zorladığı için jQuery(function($){...});yerine kullanmalısınız .$(document).ready(function(){...});$


Bunun "tamamen aynı şey" olduğundan emin misiniz? Css'inizin (veya ana html ile paralel olarak yüklenen diğer kodun) henüz tam olarak çözümlenmemiş olabileceği izlenimine kapıldım.
Zach Lysobey

6
@ZachL, CSS tam olarak ayrıştırılmadan önce belge hazır olabilir. document.ready aynı değildir olarak onloadgörüntüleri ve diğer harici varlıklar bitmiş yükleme var olayın.
zzzzBov

Açıklama için teşekkürler.
Zach Lysobey

5
Bu "hayır" bana 3 saatlik çalışmaya mal oldu .. sadece <body> ile hata yapmadığınızdan emin olun </body> :)
teejay

1
Yine de, özellikle noConflict()herhangi bir nedenle kullanılması gerekiyorsa , takma adı zorlamak konusunda hemfikir değilim .
Jay Blanchard

22

Hayır, javascript'iniz kapanmadan önceki son şeyse, bu etiketleri eklemenize gerek yoktur.

Bir yan not olarak, $ (document) .ready'nin kısaltması aşağıdaki koddur.

$(function() {
// do something on document ready
});

Bu soru iyi olabilir. Okudun mu? jQuery: Sayfanın altındaki harici JS ise neden document.ready kullanasınız?


6
Esas olarak soru, "Komut dosyalarımı gövdenin alt kısmına koyduğumda belgenin hazır olmasına ihtiyacım var mı?" Sorusudur, "Yazmanın kısa yolu var mı?" Değil $(document).ready().
nnnnnn

4

Hayır, herhangi bir ertelenmiş işiniz olmadığını bilmeniz şartıyla gerekli değildir - ve çoğu durumda üzerinde çalıştığınız şeyi yukarıdan aşağıya doğru geliştirip geliştirmediğinizi bileceksiniz.

- Başkasının kodunu iyice denetlemeden getirdiğinizde, bilmiyorsunuzdur.

Öyleyse, kendinize sorun, yapıda size yardımcı olacak bir çerçeve veya düzenleyici kullanıyor musunuz? Başkasının kodunu getiriyor musunuz ve her dosyayı okumak için zahmet etmediniz mi? Kodunuzu test etmek için İşletim Sistemi, Tarayıcı ve Tarayıcı Sürümü matrisini incelemeye hazır mısınız? Eğer Do ihtiyaç kodunuzdan hızının her ons sıkmak?

document.ready () bu soruların çoğunu geçersiz kılar. document.ready () hayatınızı kolaylaştırmak için tasarlandı. Küçük (ve kabul edilebilir olduğunu söyleyebilirim) bir performans artışıyla geliyor.


Sadece gördüğüm bir şey - düzenlemelerinizden biri reddedildi, ama bana iyi görünüyor. Bunu yeniden göndermek isteyebilirsiniz: stackoverflow.com/review/suggested-edits/3224385
Qantas 94 Heavy

1

İnternette jquery'lerin kullanımıyla ilgili referanslar / blog gönderileri gördüm document.ready. Bence hem onu ​​kullanmak hem de tüm javascript'i sayfanın altına koymak geçerli. Ve şimdi soru, hangisinin daha iyi olacağı? Bu sadece bir programlama tarzı meselesi.


0

Hayır, gerekli değil. Komut dosyası etiketini gövde kapanış etiketinin hemen öncesine yerleştirebilir veya IE9 + 'yı destekliyorsa yerel JS'yi kullanabilirsiniz.

<script>alert('DOM Loaded!');</script>
</body>

<script>
document.addEventListener("DOMContentLoaded", function(event) { 
      // DOM has loaded ready to fire JS scripts
    });
</script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.