MaxLevs
@MaxLevs

Парсинг HTML без подгрузки данных по ссылкам?

Приветствую. Пишу userscript "для себя", особо углубляться в изучение js пока не намерен.
На одном сайте есть 2 блока div, содержащие комментарии. Первый - все комментарии, второй - топ 3. Структура неизменна. Расширение страницы - html.
Как заполняется топ, не знаю. Комменты первого блока подгружаются страницами по 10 штук через js методом get, со страницы /engine/ajax/comments.php, в которую передается номер страницы комментов и id статьи. Результат запроса - json, состоящий из полей comments и navigation, содержимое которых - валидный html, который и вставляется в соответствующие блоки на странице. (Первый блок комментов и блок навигации по ним). У блоков комментов есть уникальные для одной страницы id, и они совпадают с id комментов в топе. (Да, именно id...)
Нужно, чтобы при нажатии на коммент топа подгружалась страница комментов, на которой он находится. Ничего умнее перебора мне в голову не пришло, поэтому я снизошел до написания такой вот штуки (сравниваем id всех комментов с id трех комментов топа, пока не нашли всех):
var news_id = window.location.pathname.match(/\d*-/)[0].match(/\d*/)[0];
 var bcont = document.getElementsByClassName('comm_best')[0];
 var best = bcont.children;
 var blen = best.length;
 var lastPage =  document.getElementsByClassName('navigation')[0].lastElementChild.innerHTML;
 var compl = 0;
 lastPage = parseInt(lastPage, 10);
    function getCommentPage(page) {
        $.get(dle_root+"engine/ajax/comments.php", {cstart:page,news_id:news_id,skin:dle_skin}, function(data){
            var com = document.createElement("div");
            com.innerHTML = data.comments;
            for(var comment = 0; comment < com.children.length; ++comment){
                for(var i = 0; i < blen; ++i){
                    if (com.children[comment].id === best[i].id){
                        best[i].onclick = function(){CommentsPage(page, news_id); return false;};
                        if(++compl === blen){
                            return 0;
                        }
                    }
                }
            }
        },"json");
    }


Пока комментов немного, можно и так, только когда их кол-во переваливает за 23000, браузер начинает сильно пыхтеть с загрузкой страницы, возникают ошибки в консоли.. Это происходит из-за того, что помимо текста в комментариях есть ещё и аватарки, и каждый раз после этой строчки
com.innerHTML = data.comments;
браузер их начитает грузить... 23000. Делать это по кд мне не комельфо, особенно если учесть, что мне нужен только id самых верхних элементов.. Как исправить?
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
MaxLevs
@MaxLevs Автор вопроса
Вопрос снят. Решил не вставлять все налево и направо, а просто использовать регулярки.
Если кому интересно (лол), вот код:
var news_id = window.location.pathname.match(/\d*-/)[0].match(/\d*/)[0];
var bestComm = document.getElementsByClassName('comm_best')[0].children;
var bestCommsIds = [];
var lastPage =  document.getElementsByClassName('navigation')[0].lastElementChild.innerHTML;
var compl = 0;
lastPage = parseInt(lastPage, 10);
for (var i = 0; i < bestComm.length; ++i) {
    bestCommsIds.push(new RegExp(bestComm[i].id));
}

function getCommentPage(page) {
    $.get(dle_root+"engine/ajax/comments.php", {cstart:page,news_id:news_id,skin:dle_skin}, function(data){
        for(i = 0; i < bestCommsIds.length; ++i){
            if (data.comments.match(bestCommsIds[i])){
                bestComm[i].onclick = function(){CommentsPage(page, news_id); return false;};
                if(++compl === bestCommsIds.length){
                    return 0;
                }
            }
        }
    },"json");
}

for(var page = 1; page < lastPage; ++page){
    getCommentPage(page);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект
22 нояб. 2024, в 11:51
20000 руб./за проект