Является ли первая .on функция более эффективной, чем вторая?jQuery .on efficiency
$("div.container").on("click", "p", function(){
});
$("body").on("click", "p", function(){
});
Привет
Является ли первая .on функция более эффективной, чем вторая?jQuery .on efficiency
$("div.container").on("click", "p", function(){
});
$("body").on("click", "p", function(){
});
Привет
От самой документации JQuery о jQuery: .on():
JQuery может обрабатывать простые селекторы тега формы # id.class очень быстро, когда они используются для фильтрации делегированных события. Итак, «#myForm», «a.external» и «button» - это быстрые селектор. Делегированные события, которые используют более сложные селектора, особенно иерархические, могут быть в несколько раз медленнее - хотя они все еще достаточно быстры для большинства приложений. Иерархических селекторов часто можно избежать, просто привязывая обработчик к более подходящей точке документа. Например, вместо $ ("body") .on ("click", "#commentForm .addNew", addComment) используют $ ("#commentForm") .on ("click", ".addNew", addComment) ,
Чем уже первый селектор, тем лучше производительность.
Но первый пример не будет работать, я думаю,, потому что вы контролируете всех <p>
сек контейнер в <p>
с container
имеющим класса и <p>
не может содержать другой <p>
, из-за будучи phrasing content.
мой плохой, я его изменю – Tukkan
Несомненно, поскольку браузеру необходимо отслеживать только один абзац для событий click, а не для всей страницы.
Возможно, поскольку событие не должно распространяться столько раз, сколько нужно, чтобы добраться до 'p.container', чтобы добраться до' body'. –
* «Иерархические селекторы часто можно избежать, просто привязывая обработчик к более подходящей точке документа. Например, вместо' $ («body») .on («click», «#commentForm .addNew», addComment) 'use' $ ("#commentForm") .on ("click", ".addNew", addComment) '." * [jQuery Doc] (http://api.jquery.com/on/#event-performance) –