-2

$.each我对 jQuery 的方法有疑问。下面是我的 ajax,它工作得很好:

$.ajax({
    url:'js/people-json.js',
    type:'post',
    dataType:'json',
    success:function(data){
        $.each(data.names, function(i, data) {
            console.log(data);
        });
    },
    error:function(err){
        console.log(err);
    }
});

该脚本运行良好,并为我提供了我想要获得的 JSON 结果。然而,这给了我结果,但这是我存储在外部 JS 文件中的一长串信息,其 JSON 格式如下所示:

{
"people": [
    {
        "name": "aaa",
        "age": 32,
        "email": "aaa@abc.xyz"
    },
    {
        "name": "bbb",
        "age": 21,
        "email": "bbb@abc.xyz"
    },
    {
        "name": "ccc",
        "age": 45,
        "email": "ccc@abc.xyz"
    },
    ..............lot of more here around 8000
  ]
}

有没有办法以这种方式在jQuery中循环:

$.each(data.names<=200, function(i, data) {
    console.log(data);
});

或者这样:

$.each(data.names, function(i<=200, data) {
    console.log(data);
});

或者这个:

$.each(data.names, function(i, data<=200) {
    console.log(data);
});

我们可以在第一次加载时循环 200 个结果,然后单击一个按钮循环另一个 200,依此类推。

注意:我更喜欢 jQuery 解决方案。

4

3 回答 3

5

直接回答你的问题,不。

.each()迭代集合中的所有项目。它不提供过滤选项。您只需像这样过滤自己,并为每次点击更改 if 语句中的值:

$.each(data, function(i, data) {
    if (i <= 200) {
        console.log(data);
    }
});

或者,如果data是一个数组,您可以提取前 200 个并迭代它们:

$.each(data.slice(0, 200), function(i, data) {
    console.log(data);
});

或者,如果data是一个数组,for循环会给你更多的灵活性:

for (var i = 0; i < 200; i++) {
    console.log(data[i]);
}

如果您尝试每次点击执行 200 个项目,那么您需要详细说明您在做什么。您是否从 ajax 调用中获得所有结果?如果是这样,您不想每次都重新获取它们。只需存储所有结果并每次处理下一个 200。保留一个计数器变量,指示到目前为止您已经处理了多少。

var data = [...];
var dataIterationCnt = 0;

function getNextChunk(n) {
    var end = Math.min(dataIterationCnt + n, data.length)
    for (var i = dataIterationCnt; i < end; i++) {
        console.log(data[i]);
    }
    dataIterationCnt = i;
    return(dataIterationCnt < data.length);
}

// then in your code, you just call getNextChunk(200)
// until it returns null which means it has no more to iterate
var more = getNextChunk(200);
于 2012-12-21T05:57:51.917 回答
1

坚持使用 jQuery,最简单的方法是遍历 中的所有项目data.names,直到批次中的最后一项,在批次开始之前拒绝这些项目。

var nameObj = {
    index: 0,
    batchSize: 200
};
function nextNamesBatch() {
    $.each(data.names, function(i, data) {
        if(i < nameObj.index) return true;//==continue
        if(i >= nameObj.index + nameObj.batchSize) return false;//==break
        console.log(data);
    });
    nameObj.index += nameObj.batchSize;
}

是的,随着批次的进行,效率问题会越来越高,但我相信,对于中等大小的数组,开销将低于替代 jQuery 方法中的开销,即data.names$.each(...).

于 2012-12-21T06:33:15.213 回答
-2

根据标签..或数据列表可以是这样的,请您尝试并告诉它是否有帮助..

$('li').each(function(index) {
    alert(index + ': ' + $(this).text());
});

请应用一些这样的逻辑并测试..

于 2012-12-21T06:10:58.200 回答