Я пишу функцию, используя наблюдателя мутаций с jQuery для регистрации изменений в DOM, особенно когда добавляется новый узел, чтобы я мог изменить его содержимое:
$("SELeCTOR GOOD" ).click(function(){
var targetNode = $(this).find('.content').get(0);
var config = { attributes: true, childList: true, subtree: true, attributeOldValue: true };
// Callback function to execute when mutations are observed
var callback = function(mutationsList) {
for(var mutation of mutationsList) {
if (mutation.type == 'childList') {
var courses = $(targetNode).find('.courses').get(0);
$(courses).find('.coursebox.clearfix').each(function( index,item ) {
var attacherURL = $(item).find('.coursename a').attr('href');
var moreInfoURL = '<a class = "btn btn-outline-primary pull-right" href = "'+attacherURL+'">More info</a>';
var oldHTML = $(item).find('div.moreinfo').html();
var newHTML = moreInfoURL + oldHTML;
//this following line is supposed to replace the html, but it creates an infinite loop
$(item).find('div.moreinfo').html(newHTML);
//end
});
}
else if (mutation.type == 'attributes') {
console.info('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
Я тоже пробовал добавить / добавить, но все создает один и тот же бесконечный цикл. Как обычно, приветствуется любая помощь.
С Уважением



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что ж, ваша модификация вызывает еще одну мутацию, в результате чего вы снова ее изменяете, вызывая бесконечный цикл. Простое решение - добавить класс к вашему элементу, чтобы пометить его как уже обработанный, и игнорировать уже обработанные узлы (узлы, которые имеют этот класс). Другой - просто проверьте, есть ли внутри dev.morinfo alreade moreInfoURL, и игнорируйте, если он уже есть
спасибо, я использовал атрибут данных, но это помогло лучше!