2014-12-30 3 views
1

для я хочу кэшировать селектор jQuery для использования позже.jQuery 'on' повторное использование родительского селектора

Чтобы сделать это, я могу сделать:

var parent = $('#parent'); 

$('.arrow', parent).click(function(){}); 

Этот код не будет работать, если мой #parent или #parent .arrow является динамическим элементом. Для этого нужно использовать .on()

$(document).on('click', '#dynamicParent .arrow', function(){}); 

Но теперь у меня нет кэшируются селектор. Как я могу кэшировать селектор, а затем использовать его внутри .on() привязки события?

Что-то вроде

$(document).on('click', '.arrow', dynamicParet, function(){}) 

?

ответ

0

если только .arrow динамична вы можете использовать

var $parent = $('#parent'); 
$parent.on('click', '.arrow', function() {}); 

если родитель является динамическим, вы не можете кэшировать его по определению

0

делегированных обработчики событий не могут использовать кэширование, так как селектор применяется на момент времени, но они не требуют кэширования в любом случае, поскольку они достаточно эффективны. Если вы не можете щелкнуть 50 000 раз в секунду, вы беспокоитесь о неправильной вещи :)

Просто используйте делегированные обработчики событий. Лучшее, что вы можете сделать для повышения эффективности (немного), - связать делегированный обработчик событий с ближайшим нединамическим элементом, который вы можете.

например. если #dynamicParent сам не является динамическим:

$('#dynamicParent').on('click', '.arrow', function(){}); 
Смежные вопросы