Справочники, инструменты, документация

JavaScript: Планировщик задач

Скрипт, который обрабатывает задачи и хранит их на вашем устройстве, enter - добавляем, клик по задаче — убираем из списка.
Сделать
Позвонить
Написать
Идеи
  <div class="row g-2">
    <div class="col">
      <h6 class="text-center">Сделать</h6>
      <!-- Поле ввода, куда пишем новые задачи «Сделать»-->
      <div id="tdl1App">
        <input type="text" class="form-control" placeholder="Новая задача">
       <!-- Создаём пока ещё пустой список «Сделать» -->
        <div class="tdl1Div">
          <ul class="List list-unstyled mt-5">
            <!-- Тут появятся наши задачи, когда мы их добавим -->
          </ul>
        </div>
      </div>
    </div>
    <div class="col">
      <h6 class="text-center">Позвонить</h6>
      <!-- Поле ввода, куда пишем новые задачи «Позвонить» -->
      <div id="tdl2App">
        <input type="text" class="form-control" placeholder="Новая задача">
       <!-- Создаём пока ещё пустой список «Позвонить» -->
        <div class="tdl2Div">
          <ul class="List list-unstyled mt-5">
            <!-- Тут появятся наши задачи, когда мы их добавим -->
          </ul>
        </div>
      </div>
    </div>
    <div class="col">
      <h6 class="text-center">Написать</h6>
      <!-- Поле ввода, куда пишем новые задачи «Написать»-->
      <div id="tdl3App">
        <input type="text" class="form-control" placeholder="Новая задача">
       <!-- Создаём пока ещё пустой список «Написать» -->
        <div class="tdl3Div">
          <ul class="List list-unstyled mt-5">
            <!-- Тут появятся наши задачи, когда мы их добавим -->
          </ul>
        </div>
      </div>
    </div>
    <div class="col">
      <h6 class="text-center">Идеи</h6>
      <!-- Поле ввода, куда пишем новые задачи «Идеи» -->
      <div id="tdl4App">
        <input type="text" class="form-control" placeholder="Новая задача">
       <!-- Создаём пока ещё пустой список «Идеи» -->
        <div class="tdl4Div">
            <ul class="List list-unstyled mt-5">
            <!-- Тут появятся наши задачи, когда мы их добавим -->
          </ul>
        </div>
      </div>
    </div>
  </div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<!-- Скрипт, который будет обрабатывать наши задачи и хранить их на нашем устройстве -->
<script>
  // Заводим переменные под наши задачи
  var List1 = $('#tdl1App ul');
  var Mask1 = 'tdl1_';
  var List2 = $('#tdl2App ul');
  var Mask2 = 'tdl2_';
  var List3 = $('#tdl3App ul');
  var Mask3 = 'tdl3_';
  var List4 = $('#tdl4App ul');
  var Mask4 = 'tdl4_';
  // Функция, которая берёт из памяти наши задачи и делает из них список
  function showTasks(){
    // Узнаём размер хранилища
    var Storage_size = localStorage.length;
    // Если в хранилище что-то есть…
    if (Storage_size > 0){
      // то берём и добавляем это в задачи  
      for (var i = 0; i < Storage_size; i++){
        var key = localStorage.key(i);
        // обрабатываем первый список
        if(key.indexOf(Mask1) == 0){
          // и делаем это элементами списка
          $('<li></li>').addClass('tdItem')
            .attr('data-itemid', key)
            .text(localStorage.getItem(key))
            .appendTo(List1);
        }
        // обрабатываем второй список
        if(key.indexOf(Mask2) == 0){
          // и делаем это элементами списка
          $('<li></li>').addClass('tdItem')
            .attr('data-itemid', key)
            .text(localStorage.getItem(key))
            .appendTo(List2);
        }
        // обрабатываем третий список
        if(key.indexOf(Mask3) == 0){
          // и делаем это элементами списка
          $('<li></li>').addClass('tdItem')
            .attr('data-itemid', key)
            .text(localStorage.getItem(key))
            .appendTo(List3);
        }
        // обрабатываем четвёртый список
        if(key.indexOf(Mask4) == 0){
          // и делаем это элементами списка
          $('<li></li>').addClass('tdItem')
            .attr('data-itemid', key)
            .text(localStorage.getItem(key))
            .appendTo(List4);
        }
      }
    }
  }
  // Сразу вызываем эту функцию, вдруг в памяти уже остались задачи с прошлого раза
  showTasks();
  // Следим, когда пользователь напишет новую задачу в первое поле ввода и нажмёт Enter
  $('#tdl1App input').on('keydown',function(e){
    if(e.keyCode != 13) return;
    var str = e.target.value;
    e.target.value = "";
    // Если в поле ввода было что-то написано — начинаем обрабатывать
    if(str.length > 0){
      var number_Id_1 = 0;
      List1.children().each(function(index, el){
        var element_Id_1 = $(el).attr('data-itemid').slice(5);
        if(element_Id_1 > number_Id_1)
          number_Id_1 = element_Id_1;
      })
      number_Id_1++;
      // Отправляем новую задачу сразу в память
      localStorage.setItem(Mask1+number_Id_1,str);
      // и добавляем её в конец списка
      $('<li></li>').addClass('tdItem')
        .attr('data-itemid', Mask1+number_Id_1)
        .text(str).appendTo(List1);
    }
  });
  // Следим, когда пользователь напишет новую задачу во второе поле ввода и нажмёт Enter
  $('#tdl2App input').on('keydown',function(e){
    if(e.keyCode != 13) return;
    var str = e.target.value;
    e.target.value = "";
    // Если в поле ввода было что-то написано — начинаем обрабатывать
    if(str.length > 0){
      var number_Id_2 = 0;
      List2.children().each(function(index, el){
        var element_Id_2 = $(el).attr('data-itemid').slice(5);
        if(element_Id_2 > number_Id_2)
          number_Id_2 = element_Id_2;
      })
      number_Id_2++;
      // Отправляем новую задачу сразу в память
      localStorage.setItem(Mask2+number_Id_2,str);
      // и добавляем её в конец списка
      $('<li></li>').addClass('tdItem')
        .attr('data-itemid', Mask2+number_Id_2)
        .text(str).appendTo(List2);
    }
  });
  // Следим, когда пользователь напишет новую задачу в третье поле ввода и нажмёт Enter
  $('#tdl3App input').on('keydown',function(e){
    if(e.keyCode != 13) return;
    var str = e.target.value;
    e.target.value = "";
    // Если в поле ввода было что-то написано — начинаем обрабатывать
    if(str.length > 0){
      var number_Id_3 = 0;
      List3.children().each(function(index, el){
        var element_Id_3 = $(el).attr('data-itemid').slice(5);
        if(element_Id_3 > number_Id_3)
          number_Id_3 = element_Id_3;
      })
      number_Id_3++;
      // Отправляем новую задачу сразу в память
      localStorage.setItem(Mask3+number_Id_3,str);
      // и добавляем её в конец списка
      $('<li></li>').addClass('tdItem')
        .attr('data-itemid', Mask3+number_Id_3)
        .text(str).appendTo(List3);
    }
  });
  // Следим, когда пользователь напишет новую задачу в четвёртое поле ввода и нажмёт Enter
  $('#tdl4App input').on('keydown',function(e){
    if(e.keyCode != 13) return;
    var str = e.target.value;
    e.target.value = "";
    // Если в поле ввода было что-то написано — начинаем обрабатывать
    if(str.length > 0){
      var number_Id_4 = 0;
      List4.children().each(function(index, el){
        var element_Id_4 = $(el).attr('data-itemid').slice(5);
        if(element_Id_4 > number_Id_4)
          number_Id_4 = element_Id_4;
      })
      number_Id_4++;
      // Отправляем новую задачу сразу в память
      localStorage.setItem(Mask4+number_Id_4,str);
      // и добавляем её в конец списка
      $('<li></li>').addClass('tdItem')
        .attr('data-itemid', Mask4+number_Id_4)
        .text(str).appendTo(List4);
    }
  });
  // По клику на задаче — убираем её из списка
  $(document).on('click','.tdItem', function(e){
    // Находим задачу, по которой кликнули
    var jet = $(e.target);
    // Убираем её из памяти
    localStorage.removeItem(jet.attr('data-itemid'));
    // и убираем её из списка
    jet.remove();
  })
// Закончился основной скрипт 
</script>