简体   繁体   English

用javascript包装受影响的div

[英]Wrap affected divs with javascript

Using moment.js I've written a script that goes through a list of events and hide those that started more than 6 hours ago and are considered finished. 我使用moment.js编写了一个脚本,该脚本遍历了事件列表,并隐藏了6个小时前开始并被视为已完成的事件。

    var x=document.getElementsByClassName("event");
    for (var i=0;i<x.length;i++) {
        var starttime = moment((x[i].getElementsByClassName("start")[0].childNodes[0].nodeValue), 'YYYY-MM-DD HH:mm');
        var cutoff = moment().subtract(6, 'hours').format('YYYY-MM-DD HH:mm');
        if (starttime.isBefore(cutoff)) {
                var expired=(x[i].getElementsByClassName("event-container")[0]);
                expired.style.display = "none";
        }
    }

The script works fine but completely hiding the divs isn't the best idea. 该脚本可以正常工作,但最好完全隐藏div不是最好的主意。 I would instead like to wrap all of the expired events in a div that then can be opened if you still want to view them. 相反,我想将所有过期的事件包装在div中,如果您仍想查看它们,则可以将其打开。 How do I go about doing that? 我该怎么做?

The end result would be something like: 最终结果将是这样的:

    <div class="openclose">
        <div class="event">
            <div class="event-container">
                Old event info goes here
            </div>
        </div>
        <div class="event">
            <div class="event-container">
                Old event info goes here
            </div>
        </div>
    </div>

    <div class="event">
        <div class="event-container">
            New event info goes here
        </div>
    </div>

    <div class="event">
        <div class="event-container">
            New event info goes here
        </div>
    </div>

Replace your javascript by this 以此替换您的JavaScript

var oldEvents = document.getElementById("oldEvents");
var x=document.getElementsByClassName("event");
for (var i=0;i<x.length;i++) {
    var starttime = moment((x[i].getElementsByClassName("start")[0].childNodes[0].nodeValue), 'YYYY-MM-DD HH:mm');
    var cutoff = moment().subtract(6, 'hours').format('YYYY-MM-DD HH:mm');
    if (starttime.isBefore(cutoff)) {
             oldEvents.appendChild(x[i]);
    }
}

This will append the event div to the oldEvents div with appendChild() 这将使用appendChild()event div附加到oldEvents div

You can use an empty div inside your html that will be filled with time. 您可以在HTML中使用一个空的div,其中将充满时间。

<div class="openclose" id="oldEvents">
    <div class="event">
        <div class="event-container">
            Old event info goes here
        </div>
    </div>
    <div class="event">
        <div class="event-container">
            Old event info goes here
        </div>
    </div>
</div>

<div class="event">
    <div class="event-container">
        New event info goes here
    </div>
</div>

<div class="event">
    <div class="event-container">
        New event info goes here
    </div>
</div>

I guess it will be better if you destroy the expired element. 我想如果销毁过期的元素会更好。 And before destroying the element append this to div#openclose 并在销毁元素之前将此内容附加到div#openclose

 var eventDiv = '<div class="event"><div class="event-container">'+expired.innerHTML+'</div></div>';

var opencloseContainer = document.getElementByClassName("openclose");

opencloseContainer.innerHTML += eventDiv;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM