Поэтому моим следующим проектом было сделать приложение, которое могло бы ранжировать разные продукты по порядку. С возможностью размещать разные продукты выше или ниже других. Для начала мне нужен веб-сайт со списком из 10 различных продуктов, поставляемых с веб-сайта, а затем кнопки вверх и вниз, при нажатии которых они перемещают элемент списка вверх или вниз, чтобы изменить порядок продуктов.

Я быстро погуглил и просмотрел предыдущие проекты, которые я проходил с курсом Udemy в прошлом, чтобы понять, как это сделать и какие методы использовать.

Сначала я создал html-файл с 10 элементами списка с 10 различными продуктами питания и дал им всем кнопку «вверх» и кнопку «вниз». Кнопки вверх и вниз имели имена классов «вверх» и «вниз», чтобы помочь связать их с Javascript.

<ul>
<li>Taco <button class='up btn btn-primary'>up</button> <button class='down'>down</button></li>
<li>Curry <button class='up'>up</button> <button class='down'>down</button></li>
<li>Roast Chicken <button class='up'>up</button> <button class='down'>down</button></li>
<li>Lamb Chops <button class='up'>up</button> <button class='down'>down</button></li>
<li>Burgers <button class='up'>up</button> <button class='down'>down</button></li>
<li>Nachoes <button class='up'>up</button> <button class='down'>down</button></li>
<li>Steak <button class='up'>up</button> <button class='down'>down</button></li>
<li>Fish <button class='up'>up</button> <button class='down'>down</button></li>
<li>Pizza <button class='up'>up</button> <button class='down'>down</button></li>
<li>Corned Beef <button class='up'>up</button> <button class='down'>down</button></li>
</ul>

Затем я написал Javascript, чтобы кнопки работали при нажатии. Вверху и внизу есть похожий javascript, но один помещает элемент перед родственным элементом, а другой - после.

Это было сделано путем перебора узлов с помощью цикла For и последующего добавления EventListener, когда пользователь нажимает кнопку. Оболочка переменной подключается к parentNode кнопки, которая в данном случае является элементом li, а затем запускается оператор if, чтобы предотвратить перемещение элемента из верхней части списка в нижнюю. Затем insertBefore используется для размещения parentNode (li) нажатой кнопки перед предыдущимElementSibling (элемент списка выше). Затем кнопка «вниз» такая же, но сначала ставится предыдущийElementSibling.

//link to the HTML class of up on all list items
var moveUp = document.querySelectorAll(".up");
for (var i = 0; i < moveUp.length; i++) {
//when clicked this function will run
moveUp[i].addEventListener('click', function(){
//create variable to link to parentNode
var wrapper = this.parentNode;
//run statement - if parentNode has a previous element then run the if statement of insert the parentNode
//that was clicked before the previousElement sibling
if (wrapper.previousElementSibling)
wrapper.parentNode.insertBefore(wrapper, wrapper.previousElementSibling)
};
//link to the HTML class of down on all list items

var moveDown = document.querySelectorAll(".down");
//loop through the list items
for (var i = 0; i < moveDown.length; i++) {
//when clicked this function will run
moveDown[i].addEventListener('click', function () {
//create variable to link to parentNode
var wrapper = this.parentNode;
//run statement - if parentNode has a previous element then run the if statement of insert the parentNode
//that was clicked before the nextElement sibling
if (wrapper.nextElementSibling)
wrapper.parentNode.insertBefore(wrapper.nextElementSibling, wrapper);
});
}

Затем я использовал Git, чтобы зафиксировать эту первую фиксацию проекта, и решил, что это ночь.

Мне удалось немного поработать над проектом в течение дня вместе с детьми, что само по себе было достижением.