首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jquery -追加ajax接收到的内容以及预加载器

Jquery -追加ajax接收到的内容以及预加载器
EN

Stack Overflow用户
提问于 2015-08-24 16:18:24
回答 2查看 81关注 0票数 2

我为我的cms创建了一个类似于流行的无限滚动wordpress插件的函数。当我滚动到页面底部并追加它们时,它会从db加载下一页。

首先它对页面列表中存在的元素进行计数:

代码语言:javascript
复制
var $number = $(".pages-3 li").length;

Number作为参数传递给php,以便从数据库中获取下一页内容:

代码语言:javascript
复制
$.ajax({
    type: "POST",
    url:"ajax.php",  
    data: { number: $number},
    beforeSend:function(){
    $(".pages-3").append('<li>LOADING</li>');},
    success:function(data) {
    $(".pages-3 li:nth-last-of-type(1)").html(data);
}

然而,这其中存在一个问题。我想添加预加载器,所以在ajax开始之前,我已经将列表项添加到列表中。然后我会用实际的页面内容替换这个项目的内容。

在追加预加载器列表项之前会对列表项进行计数。因此从理论上讲,脚本应该始终提供正确数量的列表位置。

然而,只有第一次的数字是正确的。然后数字比2大,再比3大。我真的不明白为什么。

EN

回答 2

Stack Overflow用户

发布于 2015-08-24 16:22:32

尝试在成功回调中使用:contains()

代码语言:javascript
复制
success:function(){
    $(".pages-3 li:contains(LOADING)").html(data);
}

或者您可以使用:last-child,如下所示

代码语言:javascript
复制
success:function(){
    $(".pages-3 li:last-child").html(data);
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-25 00:20:05

由于您添加的每个列表项的计数都会减少1,因此您添加的数据听起来像是包含列表项。例如,如果变量data已经包装在li标记中,您将获得嵌套标记(<li><li>Content</li></li>),因为jQuerys .html()处理元素的内部HTML。

要避免这种情况,请使用>仅匹配直接后代,如下所示:

代码语言:javascript
复制
var $number = $(".pages-3 > li").length;

为了避免将预加载器与实际内容混淆(并使您的代码更清晰),您可以给它一个类,以指示它是一个预加载器。出于显而易见的原因,我们将其命名为preloader

代码语言:javascript
复制
 $(".pages-3").append('<li class="preloader">LOADING</li>');

然后,在计算元素数量时,排除具有preloader类的元素

代码语言:javascript
复制
var $number = $(".pages-3 > li:not(.preloader)").length;

最后,在实际加载内容时删除该类:

代码语言:javascript
复制
$(".pages-3 > li.preloader").html(data).removeClass("preloader");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32177491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档