Я начинаю проект с JQuery.
Какие подводные камни / ошибки / неправильные представления / злоупотребления / злоупотребления у вас были в вашем проекте jQuery?
javascript
jquery
flybywire
источник
источник
Ответы:
Не знать о падении производительности и злоупотреблять селекторами вместо того, чтобы назначать их локальным переменным. Например:-
Скорее, чем:-
Или еще лучше с цепочкой :
Я нашел этот поучительный момент, когда понял, как работают стеки вызовов.
Редактировать: включены предложения в комментариях.
источник
var $label = $('#label');
Понять, как использовать контекст. Обычно селектор jQuery будет искать весь документ:
Но вы можете ускорить процесс поиска в контексте:
источник
[0]
.$('.myClass', ct);
или если вы знаете, что ct является экземпляром jQuery, вы можете использовать findct.find(".myClass")
Не используйте голые селекторы классов, как это:
В конце концов, мы посмотрим на каждый элемент, чтобы увидеть, есть ли у него класс «кнопки».
Вместо этого вы можете помочь, например:
Я узнал об этом в прошлом году из блога Ребекки Мерфи.
Обновление - этот ответ был дан более 2 лет назад и не подходит для текущей версии jQuery. Один из комментариев включает в себя тест, чтобы доказать это. Существует также обновленная версия теста, которая включает версию jQuery на момент ответа.
источник
$('.b')
может использовать,document.getElementsByClassName('b')
если браузер поддерживает его, но выполнение$('a.b')
заставит его получить все соответствующие элементы с классом,b
а затем подтвердить, что они являются якорями в двухэтапной операции. Последнее звучит как дополнительная работа для меня. Для реальной аналогии попробуйте следующее: найдите все носки в моей комнате. Теперь выбросьте те, которых нет в моем комоде.Попробуйте выделить анонимные функции, чтобы вы могли использовать их повторно.
источник
(anonymous)
. Подробнее об этом читайте здесь: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…Я видел сотни строк кода внутри инструкции doc ready. Уродливый, нечитаемый и невозможно поддерживать.
источник
При использовании
$.ajax
функции для запросов Ajax к серверу следует избегать использованияcomplete
события для обработки данных ответа. Он сработает независимо от того, был ли запрос успешным или нет.Вместо того
complete
, чтобы использоватьsuccess
.Смотрите Ajax Events в документах.
источник
«Цепные» анимационные события с обратными вызовами.
Предположим, вы хотите анимировать абзац, исчезающий при нажатии на него. Вы также хотели удалить элемент из DOM впоследствии. Вы можете подумать, что можете просто связать методы:
В этом примере .remove () будет вызываться до завершения .fadeOut (), уничтожая эффект постепенного затухания и просто заставляя элемент мгновенно исчезать. Вместо этого, когда вы хотите запустить команду только после завершения предыдущего, используйте функцию обратного вызова:
Второй параметр .fadeOut () - это анонимная функция, которая запускается после завершения анимации .fadeOut (). Это способствует постепенному исчезновению и последующему удалению элемента.
источник
Если вы связываете одно и то же событие несколько раз, оно срабатывает несколько раз. Я обычно всегда иду,
unbind('click').bind('click')
чтобы быть в безопасностиисточник
Не злоупотребляйте плагинами.
В большинстве случаев вам понадобится только библиотека и, возможно, пользовательский интерфейс. Если вы сохраните это простым, ваш код будет поддерживать в долгосрочной перспективе. Не все плагины поддерживаются и поддерживаются, на самом деле большинство из них не поддерживаются. Если вы можете имитировать функциональность, используя основные элементы, я настоятельно рекомендую это сделать.
Плагины легко вставляются в ваш код, экономят ваше время, но когда вам понадобится что-то дополнительное, не рекомендуется изменять их, так как вы теряете возможные обновления. Время, которое вы сэкономите при запуске, вы потеряете позже, изменив устаревшие плагины.
Выберите плагины, которые вы используете с умом. Помимо библиотеки и пользовательского интерфейса, я постоянно использую $ .cookie , $ .form , $ .validate и Thickbox . В остальном я в основном разрабатываю свои собственные плагины.
источник
Ловушка: использование петель вместо селекторов.
Если вы обнаружите, что пытаетесь перебрать элементы DOM методом jQuery '.each', спросите себя, можно ли использовать селектор для получения элементов.
Более подробная информация о селекторах jQuery:
http://docs.jquery.com/Selectors
Ловушка: НЕ использовать такой инструмент, как Firebug
Firebug был практически сделан для такой отладки. Если вы собираетесь копаться в DOM с Javascript, вам нужен хороший инструмент, такой как Firebug, чтобы сделать вас более наглядным.
Больше информации о Firebug: http://getfirebug.com/
Другие отличные идеи есть в этом эпизоде Полиморфного подкаста: (jQuery Secrets with Dave Ward) http://polymorphicpodcast.com/shows/jquery/
источник
Непонимание использования этого идентификатора в правильном контексте. Например:
И вот один из примеров, как вы можете решить это:
источник
Избегайте поиска по всему DOM несколько раз. Это то, что действительно может задержать ваш сценарий.
Плохой:
Хорошо:
Плохой:
Хорошо:
источник
Всегда кэшируйте $ (this) в значимую переменную, особенно в .each ()
Как это
источник
$self
или,$this
если вам лень думать о хорошем имени переменной.Подобно тому, что сказал Repo Man, но не совсем.
При разработке ASP.NET winforms я часто делаю
забыв знак #. Правильная форма
источник
События
не клонирует ни одно из событий - вы должны привязать их все.
В соответствии с комментарием JP t - clone () перепривязывает события, если вы передаете true.
источник
Избегайте многократного создания одних и тех же объектов jQuery
источник
$this = $(this);
в отдельной строке. Если вы можете (не создавая беспорядка), забудьте$this
и просто зацепите все:$(this).fadeIn().fadeIn();
Я говорю это и для JavaScript, но jQuery, JavaScript никогда не должен заменять CSS.
Кроме того, убедитесь, что сайт пригоден для использования тем, у кого отключен JavaScript (сегодня это не так актуально, как раньше, но всегда приятно иметь полностью работоспособный сайт).
источник
Слишком много манипуляций с DOM. Несмотря на то, что методы .html (), .append (), .prepend () и т. Д. Хороши, из-за того, что браузеры отображают и перерисовывают страницы, слишком частое их использование приведет к замедлению работы. Часто лучше создать html в виде строки и включить его в DOM один раз, а не менять DOM несколько раз.
Вместо того:
Попробуй это:
Или даже это ($ wrapper - это недавно созданный элемент, который еще не был внедрен в DOM. Присоединение узлов к этому div обертки не вызывает замедления, и в конце мы добавляем $ wrapper к $ parent, используя только одну манипуляцию DOM ):
источник
Использование ClientID для получения «реального» идентификатора элемента управления в проектах ASP.NET.
Кроме того, если вы используете jQuery внутри SharePoint, вы должны вызвать jQuery.noConflict ().
источник
Передача идентификаторов вместо объектов jQuery в функции:
Передача упакованного набора гораздо более гибкая:
источник
Чрезмерное использование цепочки.
Посмотри это:
объяснение
источник
Использовать строки в стиле аккумулятора
Используя оператор +, в памяти создается новая строка и ей присваивается объединенное значение. Только после этого результат присваивается переменной. Чтобы избежать промежуточной переменной для результата конкатенации, вы можете напрямую присвоить результат с помощью оператора + =. Медленный:
Быстрее:
Примитивные операции могут быть быстрее, чем вызовы функций
Рассмотрите возможность использования альтернативных примитивных операций над вызовами функций в циклах и функциях, критичных к производительности. Медленный:
Быстрее:
Подробнее читайте в рекомендациях по производительности JavaScript
источник
Если вы хотите, чтобы пользователи видели html-объекты в своем браузере, используйте «html» вместо «text» для вставки строки Unicode, например:
источник
мои два цента)
Обычно работа с jquery означает, что вам не нужно постоянно беспокоиться об актуальных элементах DOM. Вы можете написать что-то вроде этого -
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
и этот код будет выполняться без каких-либо ошибок.В некоторых случаях это полезно, в некоторых случаях - совсем нет, но это факт, что jquery, как правило, дружественно к пустым совпадениям. Тем не менее,
replaceWith
выдаст ошибку, если попытаться использовать ее с элементом, который не принадлежит документу. Я нахожу это довольно нелогичным.Другой ловушкой является, на мой взгляд, порядок узлов, возвращаемых методом prevAll ()
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. На самом деле ничего страшного, но мы должны помнить об этом факте.источник
Если вы планируете использовать Ajax в большом количестве данных, например, в 1500 строках таблицы с 20 столбцами, даже не думайте использовать jQuery для вставки этих данных в ваш HTML. Используйте простой JavaScript. JQuery будет слишком медленным на медленных машинах.
Кроме того, половину времени jQuery будет выполнять вещи, которые будут замедлять его, например, пытаться анализировать теги скрипта во входящем HTML и справляться с особенностями браузера. Если вам нужна быстрая скорость вставки, придерживайтесь простого JavaScript.
источник
.innerHTML
подойдет. Но если вы создаете что-то вроде Gmail, где пользователь держит вкладку открытой в течение нескольких часов, вам просто придется кусать пули и справляться с дополнительной медлительностью. Любопытно, что именно это и.html()
делает jQuery : james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlИспользование jQuery в небольшом проекте, который может быть завершен всего несколькими строками обычного JavaScript.
источник
couple of lines of ordinary JavaScript
Конечно, нет проблем. Но когда это когда-нибудь? Люди, которые говорят "почему бы не использовать ванильный JavaScript ??" IE еще не был достаточно укушен ... и не говоря уже о том, сколько кода и шаблонов вы должны написать, чтобы делать простые вещи в простом старом JS.Не понимая привязка события. JavaScript и jQuery работают по-разному.
По многочисленным просьбам, пример:
В jQuery:
Без jQuery:
В основном, хуки, необходимые для JavaScript, больше не нужны. Т.е. используйте встроенную разметку (onClick и т. Д.), Потому что вы можете просто использовать идентификаторы и классы, которые разработчик обычно использует для целей CSS.
источник