jQuery против document.querySelectorAll

Я несколько раз слышал, что самым сильным преимуществом jQuery является то, как он запрашивает и манипулирует элементами в DOM: вы можете использовать запросы CSS для создания сложных запросов, которые было бы очень сложно выполнить в обычном javascript. Однако, насколько мне известно, вы можете добиться того же результата с document.querySelector или document.querySelectorAll, которые поддерживаются в Internet Explorer 8 и выше.

Возникает вопрос: зачем «рисковать» накладными расходами jQuery, если его самое сильное преимущество может быть достигнуто с помощью чистого JavaScript?

Я знаю, что jQuery имеет больше, чем просто селекторы CSS, например кроссбраузерный AJAX, приятное присоединение событий и т. Д. Но его часть запросов - очень большая часть сильных сторон jQuery!

Есть предположения?


person Joel Blum    schedule 16.07.2012    source источник
comment
(1) Обход / модификация DOM намного быстрее и проще с jQuery. (2) Он добавляет свои собственные селекторы, которые не работают в методах querySelector. (3) Выполнение вызовов AJAX намного быстрее и проще с jQuery. (4) Поддержка IE6 +. Я уверен, что можно отметить еще много моментов.   -  person James Allardice    schedule 16.07.2012
comment
(5) ... сокращение $ () для ленивых машинисток просто необходимо.   -  person Dexter Huinda    schedule 16.07.2012
comment
проще да почему быстрее? jQuery переводится на обычный javascript, насколько я знаю ...   -  person Joel Blum    schedule 16.07.2012
comment
@James Это не быстрее или по крайней мере - только в некоторых случаях. Кроссбраузерная совместимость имеет огромное значение.   -  person Christoph    schedule 16.07.2012
comment
@Christoph - Под «быстрее» я имел в виду более быструю реализацию, а не то, что сами вызовы были быстрее, например. нет необходимости в беспорядке, связанном с получением кроссбраузерного XMLHttpRequest объекта.   -  person James Allardice    schedule 16.07.2012
comment
Это похоже на вопрос, зачем использовать C вместо assembly, когда вы можете обрабатывать вещи в assembly, гораздо более быстрое выполнение [машинный язык] и гораздо меньше используемых байтов [объектный код], хотя требует большого количества исходного кода.   -  person Dexter Huinda    schedule 16.07.2012
comment
@ JamesAllardice - весь этот беспорядок для кроссбраузерного XMLHttpRequest, возможно, состоит из 30 строк кода что вы пишете один раз и кладете в свою библиотеку.   -  person RobG    schedule 16.07.2012
comment
@RobG - Да, я не говорю, что просто используйте jQuery, если это все, для чего вы пытаетесь его использовать. Это всего лишь одно из преимуществ. Если вам нужен простой обход DOM, AJAX и querySelectorAll, и вам нужно, чтобы все это работало в старых браузерах, тогда jQuery - очевидный выбор. Я не говорю, что вам следует использовать его вот так .   -  person James Allardice    schedule 16.07.2012


Ответы (12)


document.querySelectorAll() имеет несколько несоответствий между браузерами и не поддерживается в старых браузерах В настоящее время это, вероятно, больше не вызовет никаких проблем. Он имеет очень неинтуитивный механизм определения области и некоторые другие не очень приятные функции. Также с javascript вам труднее работать с наборами результатов этих запросов, что во многих случаях вы можете захотеть сделать. jQuery предоставляет функции для работы с ними, например: filter(), find(), children(), parent(), map(), not() и некоторые другие. Не говоря уже о способности jQuery работать с селекторами псевдоклассов.

Однако я бы не стал рассматривать эти вещи как сильнейшие функции jQuery, а считаю другие вещи, такие как «работа» над dom (события, стили, анимация и манипуляции) с помощью кроссбраузерной совместимости или интерфейса ajax.

Если вам нужен только механизм выбора из jQuery, вы можете использовать тот, который использует сам jQuery: Sizzle Таким образом, у вас будет мощь движка 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
comment
Какие несовпадения querySelectorAll есть между браузерами? И как использовать jQuery для решения этой проблемы, если jQuery использует querySelectorAll, когда он доступен? - person ; 16.07.2012
comment
Правда, одна строка кода может содержать цепочки бесконечных кодов, которые могут сильно раздражать во время отладки. - person Dexter Huinda; 16.07.2012
comment
@amnotiam Я где-то нашел набор тестов, который показал некоторые незначительные ошибки в каком-то браузере, к сожалению, я больше не могу его найти. Может это уже исправили. Это правда, что во многих случаях он надежен. И sizzle принимает это, да, но он также возвращается к другим методам, таким как getElementById, из-за проблем со скоростью. - person Christoph; 16.07.2012
comment
Если вы случайно столкнетесь с этим, напишите мне. Мне было бы интересно это увидеть. Я знаю, что IE изменяет определенные атрибуты, чего не должен делать при изменении связанного свойства. Это может повлиять на селекторы атрибутов. - person ; 16.07.2012
comment
@ amnotiam - HTML5 указывает, что атрибуты IDLAttribues (также известные как свойства DOM) и атрибуты HTML должны отражать друг друга. Последние браузеры, похоже, соответствуют (например, Firefox 13, Safari 5). - person RobG; 16.07.2012
comment
@RobG: Хммм ... Я не наблюдаю такого поведения в FF 13 в Linux. Может я что-то не так делаю. - person ; 16.07.2012
comment
@ amnotiam - я просто устанавливаю атрибут с помощью setAttribute, затем читаю его, используя имя свойства, и наоборот. Не проверял атрибут в разметке, возможно, стоит. - person RobG; 17.07.2012
comment
@RobG: Странно. Я сделал то же самое, но не смог заметить изменения. В любом случае, это не та функция, на которую я мог бы положиться прямо сейчас, но я буду следить за ней. В любом случае, спасибо, что сообщили мне об этом. - person ; 17.07.2012
comment
Да ненадежно. По памяти более старые версии Firefox и Safari не изменяли атрибуты при изменении свойств, но обновляли свойства при изменении атрибутов. IE всегда держал их вместе, что считалось несоответствующим. Я предполагаю, что они изменили правила, чтобы они соответствовали. Помогает внести свой вклад в процесс разработки стандартов W3C. :-) - person RobG; 18.07.2012
comment
@squint Теперь я снова обнаружил одну из общих проблем QS и добавил ее к ответу. - person Christoph; 30.05.2013
comment
@Christoph Просто случайно наткнулся на этот вопрос и увидел, что ваша скрипка показывает проблему с областью. Я бы не назвал это проблемой. jQuery изменил наши представления о выборе элементов. Результат querySelectorAll() имеет смысл, если учесть, как его следует оценивать. Он говорит, что найдите диапазон, который является потомком любого div, но метод jQuery .find() говорит, что найдите диапазон, который является потомком моих потомков div. Я думаю, что querySelectorAll() правильно в том смысле, что он оценивает вещи справа налево (например, CSS), но обычно это не то, что мы ожидаем - person Ian; 13.06.2013
comment
@Christoph Если вы посмотрите на jsfiddle.net/YmGXs, хотя глупо включать id в querySelectorAll() вызов, числа совпадают - person Ian; 13.06.2013
comment
@ Ян, я знаю, что ты имеешь в виду. Это, безусловно, вопрос, который можно обсуждать в течение всего дня. Взгляни еще раз на мою скрипку. Логика qS противоречит всему смыслу определения объема. Вы просто не ожидаете найти дочерний диапазон, заключенный в div, потому что задан #foo как область действия, нет такого элемента, соответствующего этому критерию. Использование корня документа в качестве области видимости независимо от того, на каком элементе вы запускаете селектор, противоречит здравому смыслу и imo неверно. Также вы можете ознакомиться с статьей QuerySelector Джона Ресига. - person Christoph; 13.06.2013
comment
@Christoph Конечно, я просто хотел что-то сказать и услышать, что вы / кто-либо сказал по этому поводу. Когда вы так говорите, в этом больше смысла. Думаю, я все время думаю о селекторах CSS, которые не имеют области видимости, поэтому мой пример имеет для меня больше смысла. Но как только вы вводите область видимости, вы не можете точно следовать тем же правилам, поэтому ваш аргумент более верен. И спасибо за эту статью, я обязательно ее прочитаю :) Когда я думаю обо всем этом больше, мне трудно выбрать, считаю ли я это правильным или неправильным (не то чтобы это на самом деле имеет значение) - person Ian; 13.06.2013
comment
@Ian Интересно также официальный документ, особенно §6.2, где контекстный узел указан явно (и что возвращаемый узел находится внутри его поддерева) и §6.4, где указано, что селектор всегда оценивается в контексте всего дерева DOM. - person Christoph; 13.06.2013
comment
Вопрос касался селекторов CSS, а не стиля выбранных узлов. Как вы можете видеть здесь: jsfiddle.net/bmY7n, часть выбора не длиннее (с точки зрения строк code), чем подход jQuery. - person Vanuan; 16.07.2013
comment
2) перебрать массив дочерних узлов с помощью некоторых (возможно, вложенных или рекурсивных) циклов и проверить класс ‹★ Это полная чушь. Вы можете использовать querySelectorAll для элемента на предыдущем шаге. - person Vanuan; 16.07.2013
comment
@Vanuan это может не понадобиться, но если бы вы внимательно прочитали мой ответ, вы бы заметили, что querySelector имеет серьезную проблему с областью видимости, которая может дать вам много ложных срабатываний при использовании в пути вы делаете предложение. Тем не менее, несмотря на то, что вы можете голосовать за или против по какой-то придирчивой причине, я думаю, что это не повод для грубых выражений. - person Christoph; 16.07.2013
comment
@Christoph Мне очень жаль, если я обидел тебя. - person Vanuan; 17.07.2013
comment
Собственная версия намного быстрее. Вы должны проверить некоторые сравнения jsperf ... - person Pascalius; 01.02.2014
comment
@Pascalius Конечно, нативная версия намного быстрее, это никогда не обсуждалось. Я упоминал что-нибудь противоположное? - person Christoph; 03.02.2014
comment
@Christoph Да, на самом деле вы упомянули об этом в своем последнем предложении, что это будет в 2 раза больше кода и, возможно, медленнее;) - person Pascalius; 03.02.2014
comment
@Pascalius ну, это, возможно, медленнее, относится не к части выбора, а ко всему процессу выбора, фильтрации и установки атрибутов. Не стесняйтесь создавать для этого jsperf, я свяжу его в своем ответе и исправлю, возможно, более медленный, если хотите. - person Christoph; 03.02.2014
comment
@Christoph Вот и все, http://jsperf.com/jquery-vs-native-selector-and-element-style. Как я уже упоминал, есть огромные различия. Это более чем в 10 раз быстрее. - person Pascalius; 03.02.2014
comment
@Pascalius Спасибо, добавлю это к ответу. Тем не менее, это не совсем представимо, потому что сила jQuery - это не скорость, а кроссбраузерная совместимость. Если добавить все прокладки и условия, чтобы сделать его кроссбраузерным в машинном коде (ваш не будет работать в IE ‹10), он легко закончится с той же скоростью (или хуже). - person Christoph; 03.02.2014
comment
@Christoph Поскольку это просто, я добавил совместимость для IE8 и выше. По-прежнему огромные преимущества в скорости (в 5-20 раз). То, что код будет работать медленнее в старом браузере, таком как IE8, - ошибочное предположение. - person Pascalius; 03.02.2014

Если вы оптимизируете свою страницу для IE8 или новее, вам действительно стоит подумать, нужен ли вам jquery или нет. Современные браузеры изначально имеют множество ресурсов, которые предоставляет jquery.

Если вы заботитесь о производительности, вы можете получить невероятный выигрыш в производительности (на 2-10 быстрее), используя собственный javascript: http://jsperf.com/jquery-vs-native-selector-and-element-style/2

Я преобразовал div-tagcloud из jquery в собственный javascript (совместимый с IE8 +), результаты впечатляют. В 4 раза быстрее с небольшими накладными расходами.

                    Number of lines       Execution Time                       
Jquery version :        340                    155ms
Native version :        370                    27ms

Возможно, вам не понадобится JQuery - это действительно хороший обзор того, какие собственные методы заменяют в какой версии браузера.

http://youmightnotneedjquery.com/


Приложение: Дальнейшее сравнение скорости конкуренции нативных методов с jquery.

person Pascalius    schedule 03.02.2014
comment
хороший обзор, хотя некоторые примеры кода неверны ... Например, $(el).find(selector) не равно el.querySelectorAll(selector), и производительность собственных методов часто бывает ужасной: stackoverflow.com/q/14647470/1047823 - person Christoph; 04.02.2014
comment
@Christoph Не могли бы вы пояснить, почему вы думаете, что методы разные? Конечно, есть крайние случаи, когда jquery может работать лучше, но я не видел ни одного для DOM-Manipulation. - person Pascalius; 04.02.2014
comment
Не нужно вдаваться в подробности, просто прочтите мой ответ, посмотрите скрипку и статью, на которую я ссылаюсь. Кроме того, (по крайней мере, atm) большинство собственных методов Array уступают по скорости по сравнению с наивной реализацией js (например, я связался с вопросом в моем первом комментарии). И это не крайние случаи, а, скорее, стандартный случай. Но опять же, в центре внимания этого вопроса была не скорость. - person Christoph; 04.02.2014
comment
@Christoph Конечно, эти методы не на 100% равны, и jquery часто обеспечивает большее удобство. Я обновил ответ, чтобы показать, что это всего лишь крайний случай, я действительно не смог найти другого случая, когда jquery работал лучше. Нет основной темы вопроса. - person Pascalius; 04.02.2014
comment
+1 Отличный ответ! Я медленно заменял старый код jQuery на необработанный JavaScript в течение последних 4 или 5 лет везде и всегда, когда это было возможно. Конечно, jQuery отлично подходит для некоторых вещей, и я использую его для этих вещей, когда я чувствую, что получаю солидную выгоду. - person Yes Barry; 26.03.2014
comment
+1 Интересно, что нативная реализация Array.filter все еще так сильно отстает от $.grep - person jasonscript; 09.06.2014

Чтобы понять, почему jQuery так популярен, важно понимать, откуда мы пришли!

Около десяти лет назад лучшими браузерами были IE6, Netscape 8 и Firefox 1.5. В те дни было немного кроссбраузерных способов выбора элемента из DOM, кроме Document.getElementById().

Итак, когда jQuery был выпущен еще в 2006 году, он был довольно революционным. Тогда jQuery установил стандарт того, как легко выбирать / изменять элементы HTML и запускать события, потому что его гибкость и поддержка браузера были беспрецедентными.

Теперь, более десяти лет спустя, многие функции, которые сделали jQuery столь популярным, стали включены в стандарт javaScript:

В 2005 году они не были общедоступными. Тот факт, что они есть сегодня, очевидно, вызывает вопрос, зачем нам вообще использовать jQuery. И действительно, люди все чаще задаются вопросом, стоит ли нам вообще использовать jQuery < / strong>.

Итак, если вы думаете, что понимаете JavaScript достаточно хорошо, чтобы обойтись без jQuery, пожалуйста! Не чувствуйте себя вынужденным использовать jQuery только потому, что это делают многие другие!

person John Slegers    schedule 29.03.2016

Это потому, что jQuery может намного больше, чем querySelectorAll.

Прежде всего, jQuery (и, в частности, Sizzle) работает для старых браузеров, таких как IE7-8, которые не поддерживают селекторы CSS2.1-3.

Кроме того, Sizzle (который является механизмом выбора, стоящим за jQuery) предлагает вам множество более продвинутых инструментов выбора, таких как псевдокласс :selected, расширенный селектор :not(), более сложный синтаксис, как в $("> .children"), и так далее.

И он делает это безупречно кроссбраузерным, предлагая все, что может предложить jQuery (плагины и API).

Да, если вы думаете, что можете положиться на простые селекторы классов и идентификаторов, jQuery для вас слишком много, и вы заплатите преувеличенную выгоду. Но если вы этого не сделаете и хотите воспользоваться всеми достоинствами jQuery, используйте его.

person MaxArt    schedule 16.07.2012

Механизм выбора jQuery Sizzle может использовать querySelectorAll, если он доступен. Он также сглаживает несоответствия между браузерами для достижения единообразных результатов. Если вы не хотите использовать весь jQuery, вы можете просто использовать Sizzle отдельно. Изобрести это колесо довольно просто.

Вот несколько примеров из источника, которые показывают, что jQuery (w / Sizzle) решает для вас:

Режим причуд Safari:

if ( document.querySelectorAll ) {
  (function(){
    var oldSizzle = Sizzle,
      div = document.createElement("div"),
      id = "__sizzle__";

    div.innerHTML = "<p class='TEST'></p>";

    // Safari can't handle uppercase or unicode characters when
    // in quirks mode.
    if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
      return;
    }

Если этот охранник терпит неудачу, он использует версию Sizzle, которая не расширена с помощью querySelectorAll. Ниже приведены специальные меры для устранения несоответствий в IE, Opera и браузере Blackberry.

  // Check parentNode to catch when Blackberry 4.6 returns
  // nodes that are no longer in the document #6963
  if ( elem && elem.parentNode ) {
    // Handle the case where IE and Opera return items
    // by name instead of ID
    if ( elem.id === match[3] ) {
      return makeArray( [ elem ], extra );
    }

  } else {
    return makeArray( [], extra );
  }

А если ничего не помогает, возвращается результат oldSizzle(query, context, extra, seed).

person KGZM    schedule 16.07.2012

Что касается ремонтопригодности кода, есть несколько причин придерживаться широко используемой библиотеки.

Одна из основных - они хорошо документированы и имеют сообщества, такие как ... скажем ... stackexchange, где можно найти помощь с библиотеками. С библиотекой с настраиваемым кодированием у вас есть исходный код и, возможно, практический документ, если только кодер (-ы) не тратил больше времени на документирование кода, чем на его написание, что исчезающе редко.

Написание собственной библиотеки может сработать для вас, но стажеру, сидящему за соседним столом, может быть легче освоиться с чем-то вроде jQuery.

Назовите это сетевым эффектом, если хотите. Это не означает, что код в jQuery будет лучше; просто краткий характер кода упрощает понимание общей структуры для программистов всех уровней квалификации хотя бы потому, что в просматриваемом файле сразу отображается больше функционального кода. В этом смысле 5 строк кода лучше 10.

Подводя итог, я вижу основные преимущества jQuery в краткости кода и повсеместности.

person Dom Day    schedule 16.07.2013

Вот сравнение, если я хочу применить тот же атрибут, например. скрыть все элементы класса «мой-класс». Это одна из причин использовать jQuery.

jQuery:

$('.my-class').hide();

JavaScript:

var cls = document.querySelectorAll('.my-class');
for (var i = 0; i < cls.length; i++) {
    cls[i].style.display = 'none';
}

Поскольку jQuery уже так популярен, они должны были заставить document.querySelector () вести себя так же, как $ (). Вместо этого document.querySelector () выбирает только первый соответствующий элемент, что делает его полезным только наполовину.

person Steven    schedule 18.10.2015
comment
Я бы сделал .forEach здесь. - person Phillip Senn; 01.11.2016
comment
Что ж, вы всегда можете пойти по более легкому маршруту document.querySelectorAll('.my-class').forEach(el => el.style.display = 'none');. Тем не менее, даже если он короче, нативный с точки зрения производительности всегда лучше. - person Alain Cruz; 12.11.2019
comment
С точки зрения пользователя, все, что происходит менее чем за 0,1 секунды, происходит немедленно. Следовательно, native даже быстрее, лучше только в том случае, если реализация jQuery медленнее, чем на 0,1 сек. А в реальных приложениях никогда не бывает. - person yurin; 09.01.2020

Старый вопрос, но спустя полдесятилетия к нему стоит вернуться. Здесь я обсуждаю только селекторный аспект jQuery.

document.querySelector[All] поддерживается всеми текущими браузерами, вплоть до IE8, поэтому совместимость больше не является проблемой. Я также не обнаружил проблем с производительностью, о которых стоит говорить (он должен был быть медленнее, чем document.getElementById, но мое собственное тестирование показывает, что он немного быстрее).

Поэтому, когда дело доходит до непосредственного управления элементом, предпочтительнее jQuery.

Например:

var element=document.querySelector('h1');
element.innerHTML='Hello';

значительно превосходит:

var $element=$('h1');
$element.html('hello');

Чтобы что-то сделать, jQuery должен пройти через сотню строк кода (однажды я проследил код, подобный приведенному выше, чтобы увидеть, что jQuery на самом деле делает с ним). Очевидно, что это пустая трата времени.

Другая значительная стоимость jQuery заключается в том, что он оборачивает все внутри нового объекта jQuery. Эти накладные расходы особенно расточительны, если вам нужно снова развернуть объект или использовать один из методов объекта для работы со свойствами, которые уже представлены в исходном элементе.

Однако преимущество jQuery заключается в том, как он обрабатывает коллекции. Если требуется установить свойства нескольких элементов, jQuery имеет встроенный метод each, который позволяет что-то вроде этого:

var $elements=$('h2');  //  multiple elements
$elements.html('hello');

Чтобы сделать это с помощью Vanilla JavaScript, потребуется что-то вроде этого:

var elements=document.querySelectorAll('h2');
elements.forEach(function(e) {
    e.innerHTML='Hello';
});

что некоторые находят пугающим.

Селекторы jQuery также немного отличаются, но современные браузеры (за исключением IE8) не получат особой пользы.

Как правило, я предостерегаю от использования jQuery для новых проектов:

  • jQuery - это внешняя библиотека, которая увеличивает накладные расходы проекта и увеличивает вашу зависимость от третьих лиц.
  • Функция jQuery очень дорогостоящая с точки зрения обработки.
  • jQuery навязывает методологию, которую необходимо изучить, и которая может конкурировать с другими аспектами вашего кода.
  • jQuery медленно открывает новые функции в JavaScript.

Если ничего из вышеперечисленного не имеет значения, делайте то, что хотите. Однако jQuery уже не так важен для кроссплатформенной разработки, как раньше, поскольку современные JavaScript и CSS идут намного дальше, чем раньше.

Здесь не упоминаются другие функции jQuery. Однако я думаю, что и к ним нужно присмотреться.

person Manngo    schedule 06.03.2018
comment
Ваш синтаксис даже неверен, не говоря уже о других неправильных вещах, таких как медленное отображение новых функций в Javascript. JQuery даже не раскрывает новые функции, а упрощает вам манипулирование DOM и выполнение простых вещей, которые могут быть как 10 строки в Javascript. Весь ваш комментарий просто не имеет смысла и содержит много неправильного. Подумайте о его улучшении. - person Boy pro; 30.08.2018
comment
@Boypro Спасибо за ваш комментарий, но он тоже полон ошибок. Возможно, вы хотели бы поделиться тем, что вас так сильно оскорбляет в моем ответе. Что «даже не правильно». Более того, вы можете добавить свой собственный ответ. Вопрос в стоимости использования jQuery, когда ванильный JavaScript так много может. Попробуйте ответить на него. - person Manngo; 30.08.2018

как говорится на официальном сайте: "jQuery: меньше пишите, делайте больше, библиотека JavaScript"

попробуйте перевести следующий код jQuery без какой-либо библиотеки

$("p.neat").addClass("ohmy").show("slow");
person simon xu    schedule 16.07.2012
comment
Я согласен с этим, но как насчет удобочитаемости? как вы можете документировать длинные строки кода, в которых происходит много не связанных между собой вещей? Как можно отладить такие чудовища? - person Joel Blum; 16.07.2012
comment
@ user1032663, это вопрос соглашений о документации. - person Christoph; 16.07.2012
comment
Альтернатива jQuery (или любой другой популярной библиотеке, которую вы выберете) не в том, чтобы писать все с нуля, а в использовании библиотеки, которая соответствует вашим целям и хорошо написана. Возможно, вы сами написали части или выбрали модульную библиотеку, такую ​​как MyLibrary, чтобы включить только то, что вам нужно. . - person RobG; 16.07.2012
comment
Пример, который вы выбрали, на самом деле не подтверждает вашу точку зрения: вопрос заключается в поиске различий в области выбора. addClass() и show() на самом деле не в счет. А что касается $('p.neat'), вы можете посмотреть querySelector / All. - person kumarharsh; 18.08.2013
comment
document.querySelectorAll('p.neat').forEach(p=>p.classList.add('ohmy'));, а все остальное сделает CSS. Код чуть длиннее, но намного эффективнее. Конечно, его решение было не так доступно во времена Legacy IE. Часть «Делай больше» иронична. Чтобы что-то найти, jQuery требуется около сотни строк кода, поэтому выполнение большего не всегда продуктивно. - person Manngo; 12.03.2020

Я думаю, что верный ответ заключается в том, что jQuery был разработан задолго до того, как querySelector/querySelectorAll стал доступен во всех основных браузерах.

Первоначальный выпуск jQuery был выпущен в 2006 году. Фактически, даже jQuery не был первым, в котором реализованы селекторы CSS.

IE был последним браузером, который реализовал querySelector/querySelectorAll. Его восьмая версия была выпущена в 2009 году.

Итак, теперь селекторы элементов DOM больше не самая сильная сторона jQuery. Тем не менее, у него все еще есть много плюсов в рукаве, например, ярлыки для изменения содержимого css и html элемента, анимации, привязки событий, ajax.

person Vanuan    schedule 16.07.2013

$("#id") vs document.querySelectorAll("#id")

Дело в том, что функция $ () создает массив, а затем разбивает его для вас, но с помощью document.querySelectorAll () он создает массив, и вы должны его разбить.

person Community    schedule 29.11.2017

Просто прокомментируйте это, при использовании материального дизайна lite селектор jquery по какой-то причине не возвращает свойство для материального дизайна.

Для:

<div class="logonfield mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
        <input class="mdl-textfield__input" type="text" id="myinputfield" required>
        <label class="mdl-textfield__label" for="myinputfield">Enter something..</label>
      </div>

Это работает:

document.querySelector('#myinputfield').parentNode.MaterialTextfield.change();

Это не так:

$('#myinputfield').parentNode.MaterialTextfield.change();
person Ashvin Bhuttoo    schedule 18.09.2018