Ben bir jQuery acemisiyim ve bazı kod örneklerine bakarken buldum:
$(document.body)
ve $('body')
Bu ikisi arasında bir fark var mı?
Ben bir jQuery acemisiyim ve bazı kod örneklerine bakarken buldum:
$(document.body)
ve $('body')
Bu ikisi arasında bir fark var mı?
$(body)
.on('click'...
olaylar için çalışmaz , oysa $(document.body)
ve $(document)
her ikisi de çalışır.
Yanıtlar:
Aynı öğeye başvururlar, fark, document.body
öğeyi doğrudan jQuery'ye geçirdiğinizi söylediğinizde . Alternatif olarak, dizeyi ilettiğinizde 'body'
, jQuery seçici motorunun hangi öğelere başvurduğunu anlamak için dizeyi yorumlaması gerekir.
Uygulamada ya işi bitirecek.
İlgileniyorsanız, jQuery işlevinin belgelerinde daha fazla bilgi bulunmaktadır .
Buradaki cevaplar aslında tamamen doğru değil . Yakın, ama uç bir durum var.
Aradaki fark, $ ['body') öğesinin aslında öğeyi etiket adına göre seçmesidir, oysa document.body belgedeki doğrudan nesneye başvurur.
Bunun anlamı, siz (veya bir hileli komut dosyası) document.body öğesinin (ayıp!) $ ('Body') üzerine yazmanız durumunda yine de çalışacak, ancak $ (document.body) çalışmayacaktır. Yani tanım gereği eşdeğer değiller.
Belge nesnesindeki üzerine yazılan bir gövde öğesinin miktarını tetikleyen başka uç durumlar (IE'de küresel olarak tanımlanmış öğeler gibi) olduğunu ve aynı durumun geçerli olacağını tahmin etmeye cesaret ediyorum.
document.body
başka bir şeye ayarlanmasının mümkün olduğunu sanmıyorum <body>
: i.imgur.com/unJVwXy.png
Tarayıcımda test yaparken zamanlamada oldukça büyük bir fark buldum.
Aşağıdaki komut dosyasını kullandım:
UYARI: bunu çalıştırmak tarayıcınızı biraz dondurur, hatta çökebilir.
var n = 10000000, i;
i = n;
console.time('selector');
while (i --> 0){
$("body");
}
console.timeEnd('selector');
i = n;
console.time('element');
while (i --> 0){
$(document.body);
}
console.timeEnd('element');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
10 milyon etkileşim yaptım ve sonuçlar şunlardı (Chrome 65):
seçici: 19591.97509765625ms
öğe: 4947.8759765625ms
Öğeyi doğrudan geçmek, seçiciyi geçmekten yaklaşık 4 kat daha hızlıdır.
$(document.body)
Genel referans kullanarak document
bir referans almak için body
, oysa $('body')
jQuery'ye referans alacak olan bir seçici olan <body>
öğenin document
.
Görebildiğim kadar büyük bir fark yok, birinden diğerine gözle görülür bir performans kazancı yok.
$(document.body)
bu makaleye göre ölçülebilir şekilde daha hızlı: sitepoint.com/jquery-body-on-document-on
Hiç fark olmamalı, belki ilki biraz daha performanslı ama bence önemsiz (bunun için endişelenmemelisin, gerçekten).
İkisiyle de <body>
etiketi bir jQuery nesnesine sararsınız
Sonuç olarak her ikisi de eşdeğerdir. İkinci ifade, DOM kökünden yukarıdan aşağıya bir aramadan geçer. JQuery'nin sarması için elinizde document.body nesnesine zaten sahipseniz, ek yükten kaçınmak isteyebilirsiniz (ne kadar küçük olursa olsun). Http://api.jquery.com/jQuery/ #Selector Bağlamına bakın