我有一个div元素( #receivedInfo ),其中包含p个元素。每个p元素都有一个日期。我设法从每个元素中取出这个日期并将其与当前日期进行比较 在将每个元素与当前日期进行比较后,我想将它们移动到两个div中:
我设法进行了比较,但我只能移动一个元素。
以下是我使用的HTML:
<div id="receivedInfo" class="hidden">
<p>16.10.2012 - <a href="#">test line 1</a></p>
<p>16.10.2012 - <a href="#">test line 2</a></p>
<p>16.10.2012 - <a href="#">test line 3</a></p>
<p>16.10.2012 - <a href="#">test line 4</a></p>
</div>
<div class="licitatiiActive"></div>
<div class="licitatiiInactive"></div>
这是我使用的jQuery:
var fullDate = new Date();
var twoDigitMonth = (fullDate.getMonth()+1)+"";
if(twoDigitMonth.length==1) twoDigitMonth="0" +twoDigitMonth;
var twoDigitDate = fullDate.getDate()+"";
if(twoDigitDate.length==1) twoDigitDate="0" +twoDigitDate;
var currentDate = twoDigitDate + "." + twoDigitMonth + "." + fullDate.getFullYear();
var dataLic;
var infoP;
$.each($("#receivedInfo p"), function () {
var info = $(this).html();
dataLic = info.split(' - ')[0].trim();
infoP = "<p>" + info + "</p>";
});
if (dataLic > currentDate) {
$(".licitatiiInactive").html(infoP);
} else {
$(".licitatiiActive").html(infoP);
}
如上所述,结果是只有div“ #receivedInfo ”中的第一个p元素被移动到div“ .licitatiiInactive ”。 如何调整此脚本以将“ #receivedInfo ”的每个元素移动到正确的div?
答案 0 :(得分:1)
问题是each
循环的每次传递都会覆盖变量infoP
,并且您不会在each
完成之后移动html。
相反,您想要检查循环每次传递中的日期并附加新的html字符串。
编辑日期逻辑可以通过比较2个日期对象来简化和清理,如此代码所示
DEMO: http://jsfiddle.net/8ngA5/2/
var fullDate = new Date();
$("#receivedInfo p").each(function() {
var info = $(this).html();
var dataLic = $.trim(info.split(' - ')[0]).split('.');
var d=new Date(parseInt( dataLic[2]), parseInt( dataLic[1]), parseInt( dataLic[0]))
var infoP = "<p>" + info + "</p>";
if (d < fullDate) {
$(".licitatiiInactive").append(infoP);
} else {
$(".licitatiiActive").append(infoP);
}
});
答案 1 :(得分:1)
按如下方式修改脚本:
var fullDate = new Date();
var twoDigitMonth = (fullDate.getMonth()+1)+"";
if(twoDigitMonth.length==1) twoDigitMonth="0" +twoDigitMonth;
var twoDigitDate = fullDate.getDate()+"";
if(twoDigitDate.length==1) twoDigitDate="0" +twoDigitDate;
var currentDate = twoDigitDate + "." + twoDigitMonth + "." + fullDate.getFullYear();
var dataLic;
var infoP;
$.each($("#receivedInfo p"), function () {
var info = $(this).html();
dataLic = info.split(' - ')[0].trim();
infoP = "<p>" + info + "</p>";
if (dataLic > currentDate) {
$(".licitatiiInactive").append(infoP);
} else {
$(".licitatiiActive").append(infoP);
}
});
答案 2 :(得分:1)
自从我使用chrome dev tools进行调试并且console.log每次显示相同日期以来,我一开始感到惊讶。原因是每个样本日期都是相同的。
下面你可以看到一个有效的解决方案。 var dataLic在每个循环中填充,其当前值由appendDate处理。
$.each($("#receivedInfo p"), function () {
dataLic = $(this).html().split(' - ')[0].trim();
console.log("dataLic", dataLic, "currentDate", currentDate);
appendDate(dataLic, currentDate);
});
function appendDate(dataLic, currentDate){
if (dataLic > currentDate) {
$(".licitatiiInactive").append(dataLic +"<br/>");
} else {
$(".licitatiiActive").append(dataLic+"<br/>");
}
}
在我更改样本日期后找到错误非常简单。
您使用$.each
循环每个日期,但复制值的代码在循环之外。如果你把你的代码(参见我的function appendDate()
)放在循环中,每个值都将被处理,而不仅仅是最后一个。
请查看working solution to copy the elements