document.querySelectorAll()
имеет несколько несоответствий в разных браузерах и не поддерживается в старых браузерах. Это, вероятно, больше не вызовет проблем в наши дни . У него очень не интуитивно понятный механизм обзора и некоторые другие не очень приятные функции . Также с javascript вам сложнее работать с результирующими наборами этих запросов, что во многих случаях может потребоваться. JQuery предоставляет функции для работы на них , как: filter()
, find()
, children()
, parent()
, map()
, not()
и еще несколько. Не говоря уже о способности jQuery работать с селекторами псевдоклассов.
Тем не менее, я бы не считал эти вещи сильнейшими функциями jQuery, а другими вещами, такими как «работа» над dom (события, стили, анимация и манипуляции) совместимым с кросс-браузером способом или интерфейсом ajax.
Если вам нужен только механизм выбора из jQuery, вы можете использовать тот, который использует сам jQuery: Sizzle. Таким образом, вы получаете мощь механизма выбора jQuerys без неприятных накладных расходов.
РЕДАКТИРОВАТЬ: Просто для записи, я большой фанат JavaScript JavaScript. Тем не менее, это факт, что вам иногда нужно 10 строк JavaScript, где вы бы написали 1 строку jQuery.
Конечно, вы должны быть дисциплинированными, чтобы не писать 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 +. Я уверен, что есть еще много моментов, которые можно сделать тоже.