Bu sözleşmeyi 2006'da tekrar başlatan ve jQuery erken posta listesinde tanıtan kişiydim, bu yüzden etrafındaki tarih ve motivasyonun bir kısmını paylaşmama izin verin.
Kabul edilen cevap şu örneği vermektedir:
var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself
Ama bu onu gerçekten iyi göstermiyor. Olmasa bile $
, burada iki farklı değişken ismimiz olacaktı email
ve email_field
. Orada çok iyi. $
Zaten iki farklı ismimiz olduğunda neden isimlerden birine atmamız gerekiyor ?
Aslında, email_field
burada iki nedenden dolayı kullanmazdım: names_with_underscores
deyimsel JavaScript field
değil ve bir DOM öğesi için gerçekten mantıklı değil. Ama aynı fikri takip ettim.
Birkaç farklı şey denedim, aralarında örneğe çok benzeyen bir şey:
var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it
(Elbette bir jQuery nesnesinin birden fazla DOM öğesi olabilir, ancak üzerinde çalıştığım kod çok fazla id
seçici , bu nedenle bu durumlarda 1: 1 yazışma vardı.)
Bir işlev parametre olarak bir DOM öğesi aldı ve ayrıca bunun için bir jQuery nesnesi gerekli başka bir durum vardı:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var emailJQ = $(email);
// Now email is the DOM element and emailJQ is a jQuery object for it
}
Bu biraz kafa karıştırıcı! Kod bitlerimden birinde email
, jQuery nesnesidir ve emailElement
DOM öğesidir, ancak diğerinde email
DOM öğesidir ve emailJQ
jQuery nesnesidir.
Tutarlılık yoktu ve onları karıştırmaya devam ettim. Ayrıca, aynı şey için iki farklı ad oluşturmaya devam etmek biraz sıkıntı vericiydi: biri jQuery nesnesi için ve diğeri eşleşen DOM öğesi için. Ayrıca email
, emailElement
ve emailJQ
diğer varyasyonları denemeye devam ettim.
Sonra ortak bir desen fark ettim:
var email = $("#email");
var emailJQ = $(email);
JavaScript $
isimler için başka bir harf gibi davrandığından ve her zaman bir $(whatever)
çağrıdan bir jQuery nesnesi aldığımdan , desen nihayet üstüme geldi. Bir $(...)
çağrı alabilir ve sadece bazı karakterleri kaldırabilirim ve oldukça güzel bir adla gelirdi:
$("#email")
$(email)
Üstü çizili mükemmel değildir, ancak şu fikri edinebilirsiniz: bazı karakterler silindiğinde, bu satırların her ikisi de şöyle görünür:
$email
İşte o zaman emailElement
ya da gibi bir sözleşmeye ihtiyacım olmadığını fark ettim emailJQ
. Zaten bana bakan güzel bir kongre vardı: bazı karakterleri bir $(whatever)
çağrıdan çıkar ve dönüşüyor $whatever
.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
ve:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var $email = $(email);
// $email is the jQuery object and email is the DOM object
// Same names as in the code above. Yay!
}
Bu yüzden her zaman iki farklı isim yapmak zorunda kalmadım, ancak aynı ismi bir $
önekle veya önek olmadan kullanabilirsiniz . Ve $
önek bir jQuery nesnesiyle uğraştığım güzel bir hatırlatma oldu:
$('#email').click( ... );
veya:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );