Повторно применить JS к динамически генерируемому контенту
Каков наилучший способ повторно применить JS к динамически генерируемому контенту? Я сказал "повторно применить JS", а не "перепривязать события", потому что подразумевается "повторно применить JS, который связывает события и также изменяет dom", то, что я сделал до сих пор, выглядит примерно так:
main.js:
function repplyDynamic(){
$('.dynamic:not(.js-initialized)').each(function(){
$(this).addClass('js-initialized').append('<div class="chaging_dom"></div>').click(function(){
alert("Ae!");
});
});
}
other_code.js
$('body').append('<div id="dynamic">content</div>'); // could be a ajax call
reapplyDynamic();
Но я думаю, что это очень грязно. Ребята, у вас есть лучший подход?
3 ответа
Лично у меня есть функция под названием dommods()
он выполняет все необходимые мне модификации (всплывающие подсказки, формы, автоматическое изменение размера текстовых полей и т. д.) и вызывает его после каждого нетривиального изменения в DOM.
Другими словами, именно то, что вы делаете, но с другим именем функции. Ничего плохого в этом нет.
//main.js
function applyDynamicStuff(content){
return content //return content
.append('<div class="chaging_dom"></div>') //with appended element
.click(function(){ //with click hander
alert("Ae!");
});
}
//other_code.js
var dynamicItem = $('<div>content</div>') //the new content
applyDynamicStuff(dynamicItem).appendTo('body'); //apply Dynamic stuff and append to body
Вы можете использовать метод jQuery $(). On, чтобы прикрепить обработчики событий к текущим или будущим элементам HTML.