javascript - 在 Javascript 中订购日历事件列表并添加月份名称
问题描述
我有一个 HTML 事件列表:
<ol id="my-list">
<li data-start="01-Jan-2019">Event on 01-Jan-2019</li>
<li data-start="25-Dec-2018">Event on 25-Dec-2018</li>
<li data-start="14-Feb-2018">Event on 14-Feb-2018</li>
<li data-start="14-Jul-2019">Event on 14-Jul-2019</li>
<li data-start="31-Oct-2019">Event on 31-Oct-2019</li>
<li data-start="13-Oct-2019">Event on 13-Oct-2019</li>
<li data-start="26-Oct-2016">Event on 26-Oct-2016</li>
<li data-start="02-Dec-2018">Event on 02-Dec-2018</li>
<li data-start="21-Dec-2018">Event on 21-Dec-2018</li>
<li data-start="18-Dec-2018">Event on 18-Dec-2018</li>
</ol>
如何将列表修改为:
<ol id="my-list">
<span>October</span>
<li data-start="01-Jan-2019">Event on 26-Oct-2016</li>
<span>February</span>
<li data-start="25-Dec-2018">Event on 14-Feb-2018</li>
<span>December</span>
<li data-start="14-Feb-2018">Event on 02-Dec-2018</li>
<li data-start="14-Jul-2019">Event on 18-Dec-2018</li>
<li data-start="31-Oct-2019">Event on 21-Dec-2018</li>
<li data-start="13-Oct-2019">Event on 25-Dec-2018</li>
<span>January</span>
<li data-start="26-Oct-2016">Event on 01-Jan-2019</li>
<span>July</span>
<li data-start="02-Dec-2018">Event on 14-Jul-2019</li>
<span>October</span>
<li data-start="21-Dec-2018">Event on 13-Oct-2019</li>
<li data-start="18-Dec-2018">Event on 31-Oct-2019</li>
</ol>
我也可以使用 jQuery。
更具体地说,我需要比较每个日期并查看月份是否已更改,如果是,请附加正确的月份名称。
首先,我订购了这些事件(来源http://jsfiddle.net/greguarr/2fr0vmhu/):
var container = $("#my-list");
var items = $("#my-list li");
items.each(function() {
// Convert the string in 'data-start' attribute to a more
// standardized date format
var BCDate = $(this).attr("data-start").split("-");
var standardDate = BCDate[1]+" "+BCDate[0]+" "+BCDate[2];
standardDate = new Date(standardDate).getTime();
$(this).attr("data-start", standardDate);
console.log($(this).attr("data-start", standardDate));
});
items.sort(function(a,b){
a = parseFloat($(a).attr("data-start"));
b = parseFloat($(b).attr("data-start"));
return a<b ? -1 : a>b ? 1 : 0;
}).each(function(){
container.append(this);
});
然后,我想将每个事件月份名称与其前一个事件月份名称进行比较,并仅在月份更改时插入月份名称。
解决方案
将每个事件的月份与前一个事件进行比较,如果不同,请将其名称附加到列表项之前:
items.each(function(i) {
var a1 = new Date($(this).data('start'));
var b1 = new Date($(this).prev().data('start'));
if (a1.getMonth() != b1.getMonth()) {
$(this).before("<span>" + defineMonth(a1.getMonth()) + "</span>");
}
});
其中 defineMonth 是一个检索月份名称的函数:
function defineMonth(evt) {
var month = new Array();
month[0] = "January";
month[1] = "February";
month[2] = "March";
month[3] = "April";
month[4] = "May";
month[5] = "June";
month[6] = "July";
month[7] = "August";
month[8] = "September";
month[9] = "October";
month[10] = "November";
month[11] = "December";
var n = month[evt];
return n;
}
推荐阅读
- python - Dataframe分类排序优化问题2
- aem - 如何使用Sightly(HTL)在服务器端基于设备渲染元素
- reactjs - 下拉列表停止使用来自反应路由器 dom 的链接进行链接
- python - 使用python的Flask rest api在通过角度httpClient访问时会产生空白屏幕
- javascript - 将鼠标事件传递给 HTML 下面的元素
- flutter - 如何同时添加 TexTheme 和 DarkTheme?
- python - 使用 Shell Executor 在 GitLab Config yml 文件中为 CI-CD 激活 Conda 环境
- c# - 传递给“登录”视图的模型为空
- javascript - 如何编译 vue2 和 vue3
- java - Spring Boot 应用程序有多个实例,但只有一个实例应该使用来自 RabbitMQ 的消息