(jquery):在Ajax:success之后,如何限制分段解析并将分段插入DOM(加快速度的技巧)

(jquery):在Ajax:success之后,如何限制分段解析并将分段插入DOM(加快速度的技巧),jquery,parsing,limit,Jquery,Parsing,Limit,假设ajax成功调用了函数:xmlParser(xml),xml响应包含大约1500个xml元素(例如:…) 里面看起来像: function xmlParser(xml){ var xmlDOM = $(xml); // dom object containing xml response xdom.find("book").each(function(){ var $node = $(this); // parsing all the &l

假设ajax成功调用了函数:xmlParser(xml),xml响应包含大约1500个xml元素(例如:…)

里面看起来像:

function xmlParser(xml){
    var xmlDOM = $(xml);  // dom object containing xml response

    xdom.find("book").each(function(){
        var $node = $(this);
        // parsing all the <book> nodes
    });
}
函数xmlParser(xml){
var xmlDOM=$(xml);//包含xml响应的dom对象
查找(“book”).each(函数(){
var$node=$(这个);
//解析所有节点
});
}
如何说:只解析xml响应中的前20个节点,对它们做些什么。您有一个按钮,…单击会解析接下来的20个节点…以此类推

因此,基本上,是否有类似于:children(20)…和一个函数,它将在单击时解析接下来的20个节点


thx

您可以在xmlParser函数上实现简单的分页。试着这样做:

function xmlParser(xml, page, perpage){
    // dom object containing xml response
    var xmlDOM = $(xml);

    // From what index to start showing
    var start = (page - 1) * perpage;

    // Find elements starting from start point using .gt() up to end point using .lt()
    xmlDOM.find("book").gt(start - 1).lt(perpage).each(function() {
        var $node = $(this);
        // Do your stuff
    });
}

// Usage
xmlParser(xml, 1, 20);
这将只处理给定页面上给定数量的项目。请注意,这个例子没有考虑最小和最大页面数等,但应该给您一些工作


但是正如David V.在评论中所指出的,您确实应该首先从服务器获取正确数量的结果,而不是在JS中解析它们。目前,您正在下载所有1500条记录,即使用户只需要前20条记录。

这应该可以完成以下工作:

xdom.find("book:gt(lowerBound):lt(upperBound)").each(function(){
    var $node = $(this);
    // parsing all the <book> nodes
});
xdom.find(“book:gt(lowerBound):lt(upperBound)”).each(function(){
var$node=$(这个);
//解析所有节点
});

其中lowerBound和upperBound是您的边界。

我将使用数据全局存储在变量或jQuery'ish上

function xmlParser(xml){
    $.data(document.body, 'xmlDOM', $(xml));  // dom object containing xml response      
});}
然后是第二个函数,比如

function getBooks(start, end){
  return($.data(document.body, 'xmlDOM').slice(start, end));
});
用法:

var books = getBooks(0,20);
 $.each(books, function(i){
   // do anything with objects, $('#something').append($(this));
 });

您应该考虑只发送要解析的元素,并在单击按钮时为其他元素提交另一个查询。XML实际是什么样子的?如果有20本书,那么下面的解决方案会起作用,如果它们不是所有的书,那么你可能需要修改它。是的,我知道。我考虑过了,但有时我无法避免更多的信息Thx,但解析器只是将其分块工作。因为iphone没有像pcxmlDOM.find(“book”).gt(start-1)那样强大的cpu给您一个新的集合,只需在.gt(start-1)之后添加.lt(perpage)即可将结果最大化到20。@Fabian,是的,我注意到了。固定:)