0

我有一个 div 元素(#receivedInfo),里面有 p 个元素。每个 p 元素中都有一个日期。我设法从每个元素中取出这个日期并将其与当前日期进行比较。
在将每个元素与当前日期进行比较后,我想将它们移动到两个 div 中:

  • 一个包含所有日期高于当前日期的元素(“ .licitatiiActive ”)
  • 另一个包含所有日期低于当前日期的元素(“ .licitatiiInactive ”)

我设法进行了比较,但我只能移动一个元素。

这是我使用的 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?

4

3 回答 3

1

问题是each循环的每次传递都会覆盖变量,并且在完成infoP之前您不会尝试移动 html 。each

相反,您想检查循环的每次传递中的日期并附加新的 html 字符串。

编辑日期逻辑可以通过比较2个日期对象来简化和清理,如这段代码所示

演示: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);
    }

});
于 2012-10-27T08:20:52.560 回答
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);
        }        
    });
于 2012-10-27T08:23:24.570 回答
1

循环外的相关部分和相同的样本日期

起初我很惊讶,因为我使用chrome 开发工具和 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())放在循环中,每个值都会被处理,而不仅仅是最后一个。请查看复制元素的有效解决方案

于 2012-10-27T08:44:02.207 回答