【问题标题】:Appending multiple divs with date IDs使用日期 ID 附加多个 div
【发布时间】:2011-05-12 15:08:24
【问题描述】:

我正在尝试创建一种生活流,我会在其中显示推文等。无论如何,我才刚刚开始,我被困在一定很容易但我无法弄清楚的事情上。

我正在尝试将一系列 div(确切地说是 30 个)附加到容器中,每个 div 都有一个类/ID 以及它所关注的日期。我已经有一个包含当前日期的日期变量,格式为 dd-mm-yyyy 。我想附加到我的容器中:

<div class="entry" id="12-05-2011">
</div>
<div class="entry" id="11-05-2011">
</div>
<div class="entry" id="10-05-2011">
</div>
etc...

第一个日期在当前日期。

您对如何做到这一点有任何想法吗?

提前致谢!

这是我的日期代码:

var time = new Date();
var day = time.getDate();
var month = time.getMonth() + 1;
if(month < 10){
month = "0" + month;
}
var year = time.getFullYear();
var date = day + "-" + month + "-" + year;

【问题讨论】:

  • 我没有回答;但快速评论。您每天只发一篇帖子的可能性有多大?如果你每天有超过一个,那么你最终会得到非唯一的 Id,它会混淆你编写的任何 javascript。
  • div 将包含当天的多个帖子。 :)
  • 一分钟,做个小提琴
  • ID 为有效 html 必须以字母 A-Z 或 a-z 开头 可以后跟:字母 (A-Za-z)、数字 (0-9)、连字符 ("-")、下划线("_")、冒号 (":") 和句点 (".") 值区分大小写

标签: jquery date calendar append


【解决方案1】:

这里有一些你可以做的JS:

date_counter = {
    current_day: (new Date()).getDate(),
    current_month: (new Date()).getMonth(),
    current_year: (new Date()).getFullYear(),
    get_date: function(days_past){
        var time = new Date(this.current_year, 
                            this.current_month, 
                            (this.current_day)+days_past);
        var day = time.getDate();
        var month = time.getMonth() + 1;
        if (month < 10) {
            month = "0" + month;
        }
        var year = time.getFullYear();
        var date = day + "-" + month + "-" + year;
        return date
    }
}

for (var i = 0; i <= 30; i++)
{
    console.log(date_counter.get_date(i));
    var date = date_counter.get_date(i);
    $the_div = $('<div>', {
        id: 'date_' + date, //to have correct types of ids (see comments below)
        text: 'Content for ' + date
    });
    $the_div.appendTo(document.body);
}

这是小提琴的例子:http://jsfiddle.net/maniator/zrnnP/

【讨论】:

  • 哇,好东西,谢谢!我实际上需要将这一天按顺序排列,但我会尝试自己进行更改并回复您!我对 javascript 很陌生,老实说,我知道这很糟糕,但我直接从 jQuery 开始,所以当谈到纯 javascript 时我还是有点迷茫呵呵......
  • nooo 问题:-D 记得尽可能选择accepted 答案:-D
  • Arf,我正在尝试修改代码以符合我的目标,但无法使其正常工作...您介意修改它以使其符合我的问题:Sequential days in a descending订单从实际日期开始?我真的很感激:)
  • 我做了 30 个月,你想要 30 天吗?
  • @neal 我毫不怀疑这是可行的,我相信你知道,但请查看我对问题的评论
【解决方案2】:

不知道为什么尼尔的答案如此复杂。也许我遗漏了一些东西,但以下似乎对我有用......

var date = new Date()
date.setMonth(date.getMonth() - 1);

while(date <= new Date()) {
    $('#container').append(getDateDiv(date));
    date.setDate(date.getDate() + 1);
}

function getDateDiv(date) {
    return '<div id="' + getDateString(date) + '"></div>';
}

function getDateString(date) {
   // note that months are 0 indexed
   return date.getDate() + '-' 
       + (date.getMonth() + 1) 
         + '-' + date.getFullYear();
}

EDIT刚刚看到你想要降序,所以...

var date = new Date()
var counter = 0;
while(counter <= 30)
{
    $('#container').append(getDateDiv(date));
    date.setDate(date.getDate() - 1);
    counter++;
}

顺便说一句,我建议改用yyyymmdd 格式的日期。

【讨论】:

  • 非常感谢,这似乎容易多了!但是有了这个解决方案,我们在循环中追加,对吗?在浏览器上是不是有点难?
  • 不是真的,除非你想展示过去几十年的历史:)。您可以将 $('#container') jQuery 选择器提升到循环外的变量中,以提高性能,如果它困扰您。
  • @fearodwhack,我改变了答案
  • @Charleshaa 重新考虑性能问题,我只是在 jsFiddle 中运行了这个,30 个 div 需要 2 毫秒。创建 10000 个 div 大约需要一秒钟。这些天计算机速度非常快!见这里:jsfiddle.net/eLKzU
  • 你能告诉我你为什么要使用 yyyymmdd 吗?干杯
猜你喜欢
  • 2018-06-01
  • 2016-04-19
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 2021-03-01
  • 2016-10-12
  • 1970-01-01
相关资源
最近更新 更多