识别第一个和最后两个帖子

Identify the first and last two posts

我正在使用下面的脚本在我的 Blogger 博客上显示最新的 5 篇文章。如何将第一篇和最后两篇文章包装在不同的 div 容器中?目前所有 5 个帖子都在存储在 item 变量中的包装容器中:

<script type='text/javascript'>
  function mycallback(json) {
    for (var i = 0; i < json.feed.entry.length; i++) {
      for (var j = 0; j < json.feed.entry[i].link.length; j++) {
        if (json.feed.entry[i].link[j].rel == 'alternate') {
          var postUrl = json.feed.entry[i].link[j].href;
          break;
        }
      }
      var postTitle = json.feed.entry[i].title.$t;
      var postAuthor = json.feed.entry[i].author[0].name.$t;
      var postSummary = json.feed.entry[i].summary.$t;
      var entryShort = postSummary.substring(0,400);
      var entryEnd = entryShort.lastIndexOf(" ");
      var postContent = entryShort.substring(0, entryEnd) + '...';
      var postImage = json.feed.entry[i].media$thumbnail.url.replace('s72-c/','s1600/');
      var item = '<div class="wrapper"><img src="' + postImage + '"/><h3><a href=' + postUrl + '>' + postTitle + '</h3></a><span>'+ postAuthor + '</span><p>' + postContent + '</p></div>';
      document.write(item);
    }
  }
</script>
<script src="/feeds/posts/summary?orderby=published&max-results=5&alt=json-in-script&callback=mycallback"></script>

通过循环检查所需的元素

// to check first or fourth element
if (i == 0 || i == 3)
// to check second or fifth element
if (i == 1 || i == 4)

通过添加 HTML 标签来包装它们

<script type='text/javascript'>
  function mycallback(json) {
    for (var i = 0; i < json.feed.entry.length; i++) {
      for (var j = 0; j < json.feed.entry[i].link.length; j++) {
        if (json.feed.entry[i].link[j].rel == 'alternate') {
          var postUrl = json.feed.entry[i].link[j].href;
          break;
        }
      }
      var postTitle = json.feed.entry[i].title.$t;
      var postAuthor = json.feed.entry[i].author[0].name.$t;
      var postSummary = json.feed.entry[i].summary.$t;
      var entryShort = postSummary.substring(0,400);
      var entryEnd = entryShort.lastIndexOf(" ");
      var postContent = entryShort.substring(0, entryEnd) + '...';
      var postImage = json.feed.entry[i].media$thumbnail.url.replace('s72-c/','s1600/');
      var item = '<div class="wrapper"><img src="' + postImage + '"/><h3><a href=' + postUrl + '>' + postTitle + '</h3></a><span>'+ postAuthor + '</span><p>' + postContent + '</p></div>';
      if (i == 0 || i == 3) document.write('<div>');
      document.write(item);
      if (i == 1 || i == 4) document.write('</div>');
    }
  }
</script>
<script src="/feeds/posts/summary?orderby=published&max-results=5&alt=json-in-script&callback=mycallback"></script>

更通用的解决方案不会检查 last 和 previous to last 元素,检查 3 或 4,但应基于帖子的总长度(可以是 3,也可以是 10000)。

下面的检查应该放在你的循环中。

if(i === 0 || i === 1)

始终使用 === 运算符,因为它是类型安全的。 还要以易于理解的方式对支票进行分组(检查一个 if 中的第一和第二个,另一个 if:

中的最后一个和上一个到最后一个

if(i === json.feed.entry.length || i === json.feed.entry.length - 1) - 此检查基于您输入的长度,而不是像 3 或 4 这样的固定值。

这样,如果您显示的条目值将来会发生变化(如 10),则您无需在此处调整代码。当代码使用更改时,您编写的所有代码都应努力在没有此类调整的情况下工作。