Причина, по которой вам нужно это сделать, заключается в том, что ваш исходный код привязывает события при загрузке документа. Поэтому вы должны сделать такой же вызов после того, как запрос Ajax завершит загрузку и новые элементы будут добавлены в DOM.
Самый простой способ, который, как я вижу, избавит вас от необходимости делать то, что вы в настоящее время делаете, - это полагаться на стандартный набор имен классов Css, который вы можете использовать (имена классов по умолчанию, которые определены в ваш код будет работать), и для него будет определен общий метод обратного вызова.
У меня нет вашего HTML здесь, поэтому я летаю вслепую. Но по стихиям:
<div class="expand">...</div>
<div class="voice_block"> ... </div>
Вы бы имели:
<div class="expand info_btn">...</div>
<div class="voice_block details_info"> ... </div>
и тогда у вас может быть функция
function genericCallback(){
$('body').switcher();
}
Который можно вызывать при каждом запросе
$('#somediv').load('some action', genericCallback);
Очевидно, что это может быть изменено для повышения производительности, так как это всего лишь подтверждение концепции. Например, в зависимости от размера вашей DOM выполнение перечисления всех элементов во время вызова switcher()
может быть нежелательным.
Кроме того, в этом примере я сохранил ваши expand
и voice_block
классы от исходных элементов на моих пересмотренных элементах, я сделал это только для того, чтобы доказать, что вы можете сохранить свои оригинальные классы, которые могут различать элементы (разные стили и т. д.), оставаясь ненавязчивым.