使用jQuery检测JSON数组中有多少元素发生了变化
Detect how many elements have changed in JSON array with jQuery
我对web开发非常陌生,所以这对你来说可能是微不足道的:
我正在建造一堵墙,墙上展示着100幅微型风景画的马赛克。我从一个远程JSON中获得这些图片的url,该JSON只包含最近上传的100张图片,从最近的开始。JSON是不断更新的。
JSON结构:
[
{
"name": "Blue Mountains",
"url": "http://foo.com/url-to-picture", // <- Most recent
"location": "Canada"
},
{
"name": "Yellow Lake",
"url": "http://foo.com/url-to-picture", // <- Second most recent
"location": "Greece"
}, ...
]
我想检查JSON每10秒,并检测是否有新的图片上传,如果有,我想知道有多少,然后用新的照片从墙上替换旧的照片。
我能想到的只有:
function getNewPictures() {
$.getJSON("http://bar.com/url-to-json", function(result) {
latest100 = result;
checkIfNewPictures(); // I don't know how to do this
old100 = latest100;
});
}
setInterval(getNewPictures, 10000);
如你所见,我不知道如何比较old100和latest100。我还认为,如果我可以将X张新图片存储到另一个数组中,这样更新wall的过程就会更容易。
实现这一目标的最实际的方法是什么?
谢谢!
有几种方法可以做到这一点,但这里是我的做法。
您正在处理的数据结构似乎不包含每个图片的唯一标识符。您将需要一种惟一地标识每张图片的方法,因此您必须创建一些东西。
假设您最初像这样输出图像:
$.getJSON("http://bar.com/url-to-json", function(result) {
$.each(result, function(index, picture) {
$('.wrapper').append("<img class='json-image' src='" + picture.url + "'/>");
});
});
您还需要给每个元素一个唯一的标识符,以便它可以被引用。
...
$.each(result, function(index, picture) {
var pictureID = picture.name + 'something' + picture.location;
pictureID = pictureID.replace(' ','');
$('wrapper').append("<img class='json-image' src='" + picture.url + "' id='" + pictureID + "'/>");
});
...
下面是一个函数,用于删除不在最新json中的图像。
function removeImages(json) {
var newImageIDs = [];
$.each(json, function(index, picture) {
//make an array of all the new image ID's
var pictureID = picture.name + 'something' + picture.location;
pictureID.replace(' ','');
newImageIDs.push(pictureID);
});
$('.json-image').each(function() {
if ( newImageIDs.indexOf($(this).attr('id')) < 0 ) {
//this image is no longer in the json, remove it
$(this).remove();
}
});
}
现在,当你得到最新的JSON,你可以添加新的和删除那些不再存在。
$.getJSON("http://bar.com/url-to-json", function (result) {
$.each(result, function (index, picture) {
var pictureID = encodeURIComponent(picture.name + 'something' + picture.location);
//only add new images
if ( !$('#' + pictureID).length ) {
$('.wrapper').append("<img class='json-image' src='" + picture.url + "' id='" + pictureID + "'/>");
}
});
removeImages(result);
});
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何通过溢出来判断元素被切断了多少像素:隐藏在父级上
- 使用 jQuery 将多个元素并排放置后,第一个元素的(额外)填充/边距是多少?
- JQuery:如何找出一个元素有多少个子元素
- 以父元素为目标,但不知道子元素和父元素之间有多少节点
- 我可以将jquery事件绑定到的元素的最大数量是多少
- 一个浏览器可以处理多少DOM元素
- Javascript显示根XML文件中有多少元素
- 一次可以播放多少个HTML音频元素
- 一个元素可以包含多少行
- 找出两个元素的起始点之间有多少像素
- 我怎么知道需要多少元素.的身体
- 默认的z-Index是多少?元素,以及如何使用JavaScript获得它
- 用Javascript计算一个Div中有多少个UL元素
- 使用jQuery检测JSON数组中有多少元素发生了变化
- 如果一个元素在HTML中不存在,那么它在表单中的值是多少?
- 我有多少个具有特定标签名称的元素
- 如何检查某种类型的多少元素有一个页面与Chrome扩展开发