document.querySelectorAll()
tarayıcılar arasında birkaç tutarsızlık var ve eski tarayıcılarda desteklenmiyor Bu, günümüzde muhtemelen sorun yaratmayacaktır . Çok sezgisel bir kapsam mekanizmasına ve çok hoş olmayan bazı özelliklere sahiptir . Ayrıca javascript ile, birçok durumda yapmak isteyebileceğiniz bu sorguların sonuç kümeleriyle çalışmakta zorlanıyorsunuz. : jQuery gibi bunlar üzerinde çalışmak için işlevler sağlamaktadır filter()
, find()
, children()
, parent()
, map()
, not()
ve çok daha fazlası. Sözde sınıf seçicileri ile çalışma jQuery yeteneğinden bahsetmiyorum bile.
Ancak, bu şeyleri jQuery'nin en güçlü özellikleri olarak düşünmüyorum, ancak dom'da (etkinlikler, stil, animasyon ve manipülasyon) bir çapraz tarama uyumlu şekilde veya ajax arabiriminde "çalışma" gibi diğer şeyler .
Seçici motorun sadece jQuery'den olmasını istiyorsanız, jQuery'nin kendisinin kullandığı: Sizzle Bu şekilde, kötü ek yükü olmayan jQuerys Selector motorunun gücüne sahip olursunuz.
EDIT: Sadece kayıt için, ben büyük bir vanilya JavaScript hayranıyım. Bununla birlikte, bazen 1 satır jQuery yazacağınız 10 satır JavaScript'e ihtiyacınız vardır.
Tabii ki böyle jQuery yazmak için disiplinli olmak zorunda:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
İkincisi oldukça açıkken, bunu okumak son derece zordur:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
Eşdeğer JavaScript, yukarıdaki sahte kodla daha karmaşık bir şekilde gösterilecektir:
1) Elemanı bulun, tüm elemanı veya sadece ilkini almayı düşünün.
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) Bazı (muhtemelen iç içe veya özyinelemeli) döngüler aracılığıyla alt düğüm dizisi üzerinde yineleyin ve sınıfı kontrol edin (sınıf listesi tüm tarayıcılarda bulunmaz!)
//.find('.foo')
for (var i = 0;i<e.length;i++){
// older browser don't have element.classList -> even more complex
e[i].children.classList.contains('foo');
// do some more magic stuff here
}
3) css stilini uygulayın
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
Bu kod, jQuery ile yazdığınız kod satırlarının en az iki katı olacaktır. Ayrıca , yerel kodun ciddi hız avantajını (güvenilirliğin yanı sıra) tehlikeye atacak çapraz tarayıcı sorunlarını da göz önünde bulundurmanız gerekir .
querySelector
Yöntemlerde çalışmayan kendi seçicilerini ekler . (3) jQuery ile AJAX çağrıları yapmak çok daha hızlı ve kolaydır. (4) IE6 + 'da destek. Eminim ki daha fazla puan verilebilir.