Показать сообщение отдельно
  #5 (permalink)  
Старый 15.04.2023, 15:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

Незаменимый сервис - https://beautifier.io, советую пользоваться им перед каждой публикацией вашего кода на этом форуме.

$.post('', function(data) {
    var link = []
    for (key in data) {
        // .find возвращает не массив элементов, а новую коллекцию jQuery.
        // + вы ищите ваши ссылки в элементе, который с большой вероятность 
        // будет размонтирован сразу после возвращении вам результата, 
        // т.е. ваши ссылки на странице существовать не будут
        link = $(data[key].content).find('a.link');
        // Даже если вы сначала засунете новый контент в блок, который присутствует на странице,
        // то в DOM останутся только узлы, которые вы добавите в последней итерации.
        // Тоже самое касается и вашей переменной `link`
        $(div).html(data[key].content);
    }
    // Тут может быть ошибка из-за того, что вы пытаетесь перебрать свойства объекта jQuery
    for (key in link) {
        if (link[key].attributes) {
            // Т.к. ваш массив `link` содержит ссылки на размонтированные элементы,
            // то никакого смысла операция ниже не несет.
            // Элементов, на которые вы пытаетесь повесить слушателей нет в DOM
            $(link[key]).on('click', function(e) {
                console.log(link[key])
            })
        }
    }
})


Попробуйте как-то так:
$.post('', function(data) {
    $(div)
        .html(
            Object.values(data).join('')
        )
        .find('a.link')
        .filter(function() {
            return Boolean(this.attributes);
        })
        .on('click', function() {
            console.log(this);
        });
});
Ответить с цитированием