Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2023, 12:44
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Обращение к DOM после ajax
Привет.

let div = document.getElementById('about-result');
$.post('',function(data){
                for (key in data) {                                
                    $(div).html(data[key].content);
                }
}
console.log(div.innerHTML) // Пустая строка


Хотя там,в innerHTML всё на месте и контент на странице есть. Что не так?
Ответить с цитированием
  #2 (permalink)  
Старый 15.04.2023, 13:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от ureech
. Что не так?
строка 7 не будет ждать ответа сервера и выполнится раньше строки 3
Ответить с цитированием
  #3 (permalink)  
Старый 15.04.2023, 14:42
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Логично. Я вынес это дело из запроса, вот почему. В $(div).html(data[key].content); я ищу ссылки на картинки. Их там несколько. Хочу, что бы они открывались в colorbox. Но если я делаю так например

$.post('',function(data){
var link = []
                for (key in data) {
                 link =  $(data[key].content).find('a.link') ;             
                    $(div).html(data[key].content);
                }
                for (key in link) {
                    if(link[key].attributes){
                    $(link[key]).on('click', function (e) {
                        console.log(link[key])
                    })
                }
                }
}

то ничего не работает.
Ответить с цитированием
  #4 (permalink)  
Старый 15.04.2023, 14:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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

Незаменимый сервис - 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);
        });
});
Ответить с цитированием
  #6 (permalink)  
Старый 15.04.2023, 18:09
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Nexus,
спасибо, что разжевали. И пример рабочий). Только colorbox работает только при клике на ссылку. То есть не работают параметры. Например
...
                .on('click', function() {
                   $(this).colorbox({
                     rel:'colorbox-link', 
                     slideshow : true // не работает
                    });

Да и вручную не перебирает картинки.
Ответить с цитированием
  #7 (permalink)  
Старый 15.04.2023, 18:12
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Догадываюсь, что его надо вешать наверное как то заранее. Но мысль не созрела ещё)
Ответить с цитированием
  #8 (permalink)  
Старый 15.04.2023, 18:21
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Заработало)))
Ответить с цитированием
  #9 (permalink)  
Старый 16.04.2023, 11:39
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 778

Всё равно не работает корректно. Если я открываю любую ссылку первый раз, пагинации нет. Затем, если открою любую другую в ней и в первой пагинация есть из них двух и тд. То есть как только они закешируются все, только потом есть пагинация. Сброшу кеш, всё по новой.тут можно посмотреть. Можно это как то поправить?
Ответить с цитированием
  #10 (permalink)  
Старый 16.04.2023, 14:24
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

ureech, может так?
$.post('', function(data) {
    $(div)
        .html(
            Object.values(data).join('')
        )
        .find('a.link')
        .filter(function() {
            return Boolean(this.attributes);
        })
        .colorbox({rel: 'main-group', open: false, slideshow: true});
});
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После отправки ajax формы на сервер, получаю такую ошибку в консоле Julia1991 AJAX и COMET 3 27.03.2020 18:45
не подгружает скрипт после ajax обновления face2005 jQuery 1 17.03.2020 07:13
Выбрать id всех select после ajax запроса veltony Events/DOM/Window 4 04.12.2019 14:09
Инициализация объекта после подгрузки ajax Ваяс AJAX и COMET 3 24.11.2013 13:46
jquery не срабатывает find после ajax versoul jQuery 7 09.09.2011 16:20