Poczekaj na metodę jquery .html, aby zakończyć renderowanie

Mam div z pionowym paskiem przewijania. Div jest aktualizowany dynamicznie przez ajax, a HTML jest wstawiany za pomocą metody .html jQuery. Po zaktualizowaniu div pasek przewijania powraca do góry i próbuję utrzymać go w poprzedniej pozycji.

W ten sposób próbuję:

var scrollPos = $('div#some_id').scrollTop(); //remember scroll pos
$.ajax({...
    success: function(data) {
        $('div#some_id').html(data.html_content); //insert html content
        $('div#some_id').scrollTop(scrollPos); //restore scroll pos
    }
});

To się nie powiedzie. Domyślam się, że zawiodło to z powodu nie wstawionego kodu HTML (tzn. Bez przewijania).

Na przykład to działa.

setTimeout(function(){
    $('div#some_id').scrollTop(scrollPos);
}, 200);

Ale moim zdaniem jest to brudny hack. Nie mam pojęcia, że ​​niektóre przeglądarki nie potrzebują więcej niż te 200 ms do renderowania wstawionej treści.

Czy istnieje sposób, aby poczekać, aż przeglądarka zakończy renderowanie wstawionego HTML przed kontynuowaniem?

questionAnswers(4)

yourAnswerToTheQuestion