我有一些代码,目前循环浏览博客上的帖子,并将它们作为带有链接和标题文本的图像输出到列表项目中(如果存在)。这工作正常,但是当我运行代码并且有photoset帖子时,每个图像和标题按照照片博客帖子循环。
(因此,如果照片集中有10张图片,并且每张图片和标题有1个标题,则会输出10次)。
这是我的原始代码:
// get tumblr posts and embed them.
var postContent = $('#tumblr-posts');
var getPosts = {};
getPosts.get = function(){
var offSet = href * 10;
$.ajax({
url:"http://api.tumblr.com/v2/blog/jessicaharby.tumblr.com/posts?limit=11",
dataType: 'jsonp',
data: {
api_key: _site._apiKey,
tag: 'news',
offset: offSet
},
success: function(results){
var i = 0;
while (i < results.response.posts.length) {
var type = results.response.posts[i].type;
var photoset = results.response.posts[i].photoset_layout;
if (type == "photo") {
var photos = results.response.posts[i].photos;
var linkURL = results.response.posts[i].post_url;
var caption = results.response.posts[i].caption;
for (var j = 0; j < photos.length; j++) {
var imgURL;
if (photos[j].alt_sizes[1]) {
imgURL = photos[j].alt_sizes[1].url
}else{
continue;
}
postContent.append("<li><img src=" + imgURL + " /><p>" + caption + "</p></li>");
}
i++;
}
console.log(results.response);
postContent.find('a').attr('target','_blank');
}
});
}
getPosts.get();
我一直试图写一个其他if语句来捕获photoset帖子。它需要精炼,但看起来像这样:
else if(photoset != null) {
for (var k = 0; k < photos.length; k++) {
var imgURL;
if (photos[k].alt_sizes[1]) {
imgURL = photos[k].alt_sizes[1].url
}else{
continue;
}
postContent.append("<li><img src=" + imgURL + " /></li>");
}
postContent.append("<li><p>" + caption + "</p></li>");
}else{
console.log('some error')
}
所以它应该吐出所有图像和帖子底部的一个标题(所以我想我需要这些都在一个列表项内)。我不是100%肯定如何敲定循环。
另一个问题是如果我写一个if / else,如果我认为我的当前代码第一个if是真的,那么帖子将被重复,或者else可能被忽略。
我有两个可以用/ fork等实验的小提琴;
1)http://jsfiddle.net/lharby/bLveggwk/1/遍历所有帖子
2)http://jsfiddle.net/lharby/bLveggwk/3/仅在photoset帖子中循环播放。
道歉,这不是最重要的问题。如果我不清楚,如果有帮助我可以画一幅画!
编辑
决定制作一张图片:
答案 0 :(得分:2)
我不确定我是否理解这个问题,顺便说一下这个解决方案http://jsfiddle.net/1bLrocj1/有效吗?
重要部分:
var set = [];
while (i < results.response.posts.length) {
var type = results.response.posts[i].type;
var photoset = results.response.posts[i].photoset_layout;
if (photoset != null) {
var photos = results.response.posts[i].photos;
var linkURL = results.response.posts[i].post_url;
var caption = results.response.posts[i].caption;
for (var j = 0; j < photos.length; j++) {
var imgURL;
if (photos[j].alt_sizes[1]) {
imgURL = photos[j].alt_sizes[1].url
} else {
continue;
}
set.push("<li><img src=" + imgURL + " /></li>");
}
if (caption) {
set.push("<li><p>" + caption + "</p></li>");
var subUl = document.createElement("ul");
for (var k = 0; k < set.length; k++) {
$(subUl).append(set[k]);
}
postContent.append(subUl);
set.length = 0;
}
} else {
console.log('some error')
}
i++;
}
css:
ul li {
padding:20px;
float:left;
max-width:550px;
background:#FFF;
}
ul li:last-child {
margin:0 1px 30px 0;
}