jQuery'de $ ('[id = foo]') seçiciden daha az verimli $ ('# foo')?
6
A
cevap
16
kısa ve kolay: EVET!
uzun hikaye (aslında halen kısa)
$('[id=foo]')
$('#foo')
doğrudan
getElementById
çağırır oysa elemanı seçmek için Sizzle (css sorgu motoru) kullanır.$('[id=foo]')
evrensel yu kullanır$('*:[id=foo]')
eşanlamlıdır:
id === foo
(hangisi sadece bir öğeyle eşleşeceğini ummaktadır), kimlikleri = benzersizdir). Bu, pahalı, oldukça maliyetlidir. Ve işte bu yüzden asla böyle bir seçici yazmamalısın!
Her zaman tam olarak bunu nitelendirir, örneğin,
$('span:[id=foo]')
1
yeah ,. Bir yerli JavaScript yöntemine doğrudan eşler çünkü
jQuery en hızlı selektör kimlik seçici $ ('# foo'), getElementById() sonra JANDY için
Ahh heres bir alt sorudur - edilmektedir '$ ('span: [id = foo]') '' $ (span # foo) 'ya da tamamen farklı bir seçici için sadece el yazısı? – HurnsMobile
@HurnsMobile: Hiç de değil. '$ ('Yayılma: [id = ece]') '. Aslında jQuery init kodunu buraya göz atmanızı tavsiye ederim. jQuery bazı seçici ifadeleri "getElementById" veya "getElementsByTagName" doğrudan çağrısına ayrıştırır, sanırım $ (span # foo) 'bunlardan biridir. Yani '$ (' span: [id = foo] ') 'dan daha hızlıdır. Bu ifade, Sizzle'a girecek ve açıkçası yukarıda belirtilen yöntemlerden daha uzun sürecek. – jAndy
Çok bilgilendirici, çok teşekkürler. Bir kimliği hedeflemek için $ ("# foo") dışında bir şey kullanmayı düşünmemin nedeni, hedeflediğim id'in bir dönem geçirmesiydi, çünkü jQuery'nin bunu bir kimlik ve bir sınıf olarak yorumlayacağı açıktır. Örneğin, $ ("[id = Address.State]") kullanarak sorunu çözebilirim. Bunun üstesinden gelmenin başka bir yolu da, $ ("# Address \\. State") gibi periyottan kaçmaktır, fakat çift kaçışın daha az okunabilir olduğunu düşündüm. Ancak, dikkat çektiğiniz verim kaybı göz önüne alındığında, yine de bunu kullanırdım. – jbyrd