Один из способов сделать это - использовать фактические даты и конструктор Date()
. Таким образом, вы можете оценить точные даты друг с другом и использовать их в функции сортировки. У вас уже есть месяц, но в этом случае год также необходим для построения правильной даты. Минимальное требование - год. В этом случае нам нужны и год, и месяц.
Я использовал элемент HTML5 <time>
, который делает вашу дату более семантичной c. Он имеет атрибут datetime
, который программы чтения с экрана и поисковые системы могут прочитать, чтобы узнать, какая дата, например, NOV
. Мы можем использовать значение в атрибуте datetime
для создания новой даты с помощью конструктора Date()
.
Сначала выберите все элементы <time>
и используйте Array.from()
или синтаксис расширения [...elements]
для создания массива из результата querySelectorAll
. Это необходимо для использования метода sort
, который доступен во всех массивах.
В методе sort()
сравните значения атрибута datetime
друг с другом, чтобы создать приказ. Теперь порядок установлен, мы хотим применить его к документу. L oop через даты снова и используйте свойство order
Flexbox, чтобы установить правильный порядок на основе индекса отсортированного массива.
Вам также нужно будет добавить display: flex;
и flex-direction: column
на вашем <ul>
элементе, чтобы заставить <li>
элементы работать со свойством order
.
Дайте мне знать, если я не был ясен или у вас есть еще вопросы.
// Get the <time> elements and put them in an array.
const dates = Array.from(document.querySelectorAll('.gallery-mlti-date'));
// Sort by date. From January to December.
dates.sort((a, b) => new Date(a.dateTime) - new Date(b.dateTime));
// Set order of list items by index of sorted list.
dates.forEach((date, index) => date.parentElement.style.order = index);
.timeline-items {
display: flex;
flex-direction: column;
}
<h2 class="fables-second-background-color date-circle">2018</h2>
<ul class="timeline-items">
<li class="is-hidden timeline-item">
<time datetime="2020-05" class="gallery-mlti-date">MAY</time>
</li>
<li class="is-hidden timeline-item">
<time datetime="2020-11" class="gallery-mlti-date">NOV</time>
</li>
<li class="is-hidden timeline-item">
<time datetime="2020-09" class="gallery-mlti-date">SEP</time>
</li>
<li class="is-hidden timeline-item">
<time datetime="2020-11" class="gallery-mlti-date">NOV</time>
</li>
</ul>