document.querySelectorAll()
имеет несколько несоответствий между браузерами и не поддерживается в старых браузерах В настоящее время это, вероятно, больше не вызовет никаких проблем. Он имеет очень неинтуитивный механизм определения области и некоторые другие не очень приятные функции. Также с javascript вам труднее работать с наборами результатов этих запросов, что во многих случаях вы можете захотеть сделать. jQuery предоставляет функции для работы с ними, например: filter()
, find()
, children()
, parent()
, map()
, not()
и некоторые другие. Не говоря уже о способности jQuery работать с селекторами псевдоклассов.
Однако я бы не стал рассматривать эти вещи как сильнейшие функции jQuery, а считаю другие вещи, такие как «работа» над dom (события, стили, анимация и манипуляции) с помощью кроссбраузерной совместимости или интерфейса ajax.
Если вам нужен только механизм выбора из jQuery, вы можете использовать тот, который использует сам jQuery: Sizzle strong > Таким образом, у вас будет мощь движка jQuerys Selector без неприятных накладных расходов.
РЕДАКТИРОВАТЬ: Просто для записи, я большой поклонник ванильного 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. Также вам придется учитывать проблемы кроссбраузерности, которые могут поставить под угрозу серьезное преимущество в скорости. (помимо надежности) нативного кода.
person
Christoph
schedule
16.07.2012
querySelector
. (3) Выполнение вызовов AJAX намного быстрее и проще с jQuery. (4) Поддержка IE6 +. Я уверен, что можно отметить еще много моментов. - person James Allardice   schedule 16.07.2012XMLHttpRequest
объекта. - person James Allardice   schedule 16.07.2012C
вместоassembly
, когда вы можете обрабатывать вещи вassembly
, гораздо более быстрое выполнение [машинный язык] и гораздо меньше используемых байтов [объектный код], хотя требует большого количества исходного кода. - person Dexter Huinda   schedule 16.07.2012querySelectorAll
, и вам нужно, чтобы все это работало в старых браузерах, тогда jQuery - очевидный выбор. Я не говорю, что вам следует использовать его вот так . - person James Allardice   schedule 16.07.2012