我正在尝试创建数据库信息的存档显示。我希望最终结果看起来像这样..
- 2018
- 一月
- ITEM1
- ITEM2
- 四月
- 第1项
我遇到的问题是我的月份和项目值没有清除,最终也将自己嵌套回上个月。我相信我已经确定了逻辑上存在的缺陷,但我无法解决这个问题。任何帮助都应该受到赞赏。我的功能看起来像......
function buildBooklistArchive( $, response ) {
var years = [];
response.forEach( function(el) {
var yearContainer = $("<ul>");
var year = $("<li>").addClass("year-" + el.YEAR);
var monthContainer = $("<ul>");
var month = $("<li>").addClass("month-" + monthConverter(el.MONTH) );
var titleContainer = $("<ul>");
var currentMonth = "";
if ( $.inArray(el.YEAR, years) === -1 ) {
years.push(el.YEAR);
currentMonth = monthConverter(el.MONTH);
year.append("<h1>" + el.YEAR + "</h1>");
month.append("<h4>" + currentMonth + "</h4>");
var titles = el.booklists.split(",");
titles.forEach( function (e) {
titleContainer.append(e);
});
month.append(titleContainer);
monthContainer.append(month);
year.append(monthContainer);
$(".archive-list").append(year);
}
else {
currentMonth = monthConverter(el.MONTH);
month.append("<h4>" + currentMonth + "</h4>");
var titles = el.booklists.split(",");
titles.forEach( function (e) {
titleContainer.append(e);
});
month.append(titleContainer);
$( '.year-' + el.YEAR + ' ul' ).append( month.hasClass("month-" + currentMonth) );
}
});
}
所以发生的事情是,当我进入else语句时,月份仍然保持上个月的值,并将自己附加到前一个列表项的底部。我的想法是,这个变量会在循环的每次迭代时重置,但是对于DOM元素可能会有所不同吗?我得到的输出看起来像这样..
- 2018
- 一月
- ITEM1
- ITEM2
- 四月
- 第1项
- 四月
- 第1项
答案 0 :(得分:1)
问题比我想象的要简单。变量像我原先想的那样被重置,但是我将最终结果附加到多个地方而不仅仅是月份容器。它应该是最后一行的monthContainer.append(月)。