jquery滚动到通过ajax动态创建的元素

分享于2023年03月08日 javascript jquery 问答
【问题标题】:jquery scroll to an element that has been created on the fly via ajaxjquery滚动到通过ajax动态创建的元素
【发布时间】:2023-03-07 21:52:01
【问题描述】:

我目前正在使用此答案 jQuery scroll to element 中提供的解决方案,但是,我遇到的问题是我要滚动到的元素已通过 ajax 插入到 dom 中,因此该功能实际上不起作用。我假设 jquery 还不知道该元素存在,因为页面实际上还没有被重新加载。

我过去曾将 jquery .delegate 之类的东西用于单击/onchange 事件,但是我不确定是否/如何使用类似的东西以便 jquery 可以找到新创建的元素。

关于如何做到这一点的任何想法?我目前用于滚动的代码是:

$('html, body').animate({ scrollTop: $("#comment_row_"+comment_id).offset().top }, 2000);

  • 显示你正在尝试的代码序列,如果你调用它时元素存在,应该可以正常工作。我怀疑你在 ajax 完成之前调用它
  • 您在哪里拨打 .animate ? JQuery“知道”通过 AJAX 添加的任何元素,但我猜你在 AJAX 调用完成之前调用了 .animate

【解决方案1】:

根据定义,AJAX 是异步的(“AJAX”中的第一个“A”),因此在 ajax 调用之后的代码将在 ajax 完成之前触发

$('#content').load( 'url.php');
/* ajax hasn't completed when this fires-FAIL*/
$('html, body').animate({ scrollTop: $("#comment_row_"+comment_id).offset().top }, 2000);


$('#content').load( 'url.php', function(){
    /* ajax has completed when this fires-PASS*/                                    
    $('html, body').animate({ scrollTop: $("#comment_row_"+comment_id).offset().top }, 2000);                                       
});

【讨论】: