Отображение div, если номер текущей недели совпадает с идентификатором div

#javascript #html

#javascript #HTML

Вопрос:

Я создаю веб-сайт, который показывает новое изображение для каждой недели в году. Я дошел до того, что смог получить номер текущей недели в качестве переменной, но я не уверен, как получить к нему доступ таким образом, чтобы я мог изменить отображение указанного DIV с «none» на «block».

Мои знания для начинающих подсказывают мне, что что-то подобное было бы правильным,

JS-код.

 Date.prototype.getWeekNumber = function(){
    var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
    var dayNum = d.getUTCDay() || 7;
    d.setUTCDate(d.getUTCDate()   4 - dayNum);
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    return Math.ceil((((d - yearStart) / 86400000)   1)/7)
  };


var s = (new Date().getWeekNumber());
var s = document.getElementById(d.getDay());
    s.style.display = (s.style.display == 'block') ? 'none' : 'block';
 

Образец HTML-кода.

 <div class="container" id="8" style="display:none">
      <div class="row">
        <div class="col">
          <h1>Week 8</h1>
          <p>Sample Text</p>
        </div>

        <div class="col">
          <img src="image.jpg" class="img-fluid">
        </div>

    </div>
 

Комментарии:

1. Вы хотите изменить отображение с block на none и наоборот?

2. Мой план состоит в том, чтобы иметь div для каждой недели года. И когда неделя изменится, я хочу изменить ее на блокировку только на эту неделю и так далее.

Ответ №1:

Следующий код должен работать. Я добавил еще один контейнер изображений для целей тестирования.

 Date.prototype.getWeekNumber = function(){
    var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
    var dayNum = d.getUTCDay() || 7;
    d.setUTCDate(d.getUTCDate()   4 - dayNum);
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
    return Math.ceil((((d - yearStart) / 86400000)   1) / 7)
};

let weekNumber = new Date().getWeekNumber();
document.getElementById(weekNumber).style.display = "block"; 
 <div class="container" id="8" style="display:none">
      <div class="row">
        <div class="col">
          <h1>Week 8</h1>
          <p>Sample Text</p>
        </div>

        <div class="col">
          <img src="image.jpg" class="img-fluid">
        </div>
 </div>
 <div class="container" id="9" style="display:none">
      <div class="row">
        <div class="col">
          <h1>Week 9</h1>
          <p>Sample Text</p>
        </div>

        <div class="col">
          <img src="image.jpg" class="img-fluid">
        </div>
 </div> 

Комментарии:

1. Ах, это работает отлично! Один быстрый вопрос, на следующей неделе он должен обновить отображение обратно до none для недели 8 и вместо этого отобразить следующий блок as? * РЕДАКТИРОВАТЬ: забыл закрыть тег DIV. Это работает отлично, спасибо вам за ваш быстрый и надежный ответ!

2. Приятно слышать 🙂