document.querySelectorAll()
Є кілька невідповідностей у веб-переглядачах і не підтримується в старих браузерах. Це, мабуть, більше не спричинить проблем . Він має дуже неінтуїтивний механізм обстеження та деякі інші не такі приємні функції . Крім того, з javascript вам важче працювати з наборами результатів цих запитів, що у багатьох випадках ви можете зробити. JQuery надає функції для роботи на них , як: filter()
, find()
, children()
, parent()
, map()
, not()
і ще кілька. Не кажучи вже про здатність jQuery працювати з селекторами псевдокласу.
Однак я б не розглядав ці речі як найсильніші функції jQuery, але інші речі, такі як "робота" на домі (події, стилізація, анімація та маніпуляції) в сумісному режимі з перехресним браузером або в інтерфейсі ajax.
Якщо ви хочете лише двигун селектора від jQuery, ви можете використовувати той самий jQuery: Sizzle Таким чином, ви маєте силу двигуна jQuerys Selector без неприємних накладних витрат.
EDIT: Тільки для запису, я величезний шанувальник JavaScript ванілі. Тим не менш, факт, що вам іноді потрібно 10 рядків JavaScript, де ви писали б jQuery з 1 рядком.
Звичайно, ви повинні бути дисциплінованими, щоб не писати jQuery так:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
Це надзвичайно важко читати, тоді як останнє досить зрозуміло:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
Еквівалент JavaScript був би набагато складнішим, проілюстрованим вище псевдокодом:
1) Знайдіть елемент, подумайте про взяття всього елемента або лише першого.
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2) Ітерації над масивом дочірніх вузлів через деякі (можливо, вкладені або рекурсивні) петлі і перевірити клас (список класів доступний не у всіх браузерах!)
//.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
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
Цей код буде принаймні в два рази більше рядків коду, який ви пишете за допомогою jQuery. Крім того, вам доведеться враховувати проблеми, пов’язані з браузером, які будуть загрожувати серйозній перевазі швидкості (крім надійності) нативного коду.
querySelector
методах. (3) Здійснювати дзвінки AJAX набагато швидше та простіше за допомогою jQuery. (4) Підтримка в IE6 +. Я впевнений, що є багато інших пунктів, які також можна зробити.