Гузариш ба мундариҷа
Мавзӯи 4 аз 5
Назария

Сохтани элементҳо ва рӯйхатҳо

Саҳифа аз маълумот

Дар барномаҳои ҳақиқӣ рӯйхати молҳо, паёмҳо ё вазифаҳо пешакӣ дар HTML навишта нашудааст — он ҳамчун массиви маълумот меояд, ва JavaScript худаш аз он элементҳо месозад. Молро ба сабад илова карданд — дар массив як объект зиёд шуд, ва дар саҳифа сатри нав пайдо шуд.

createElement

Элементи нав «дар ҳаво» сохта мешавад ва ҳанӯз намоён нест:

const li = document.createElement("li");   // <li></li>
li.textContent = "Нон харидан";
li.classList.add("task");
li.dataset.id = "7";

Барои он ки пайдо шавад, онро ба элементе, ки аллакай дар саҳифа аст, гузоштан лозим.

Ба куҷо гузоштан

const list = document.querySelector("#todo");

list.append(li);        // ба охири list
list.prepend(li);       // ба аввали list
list.before(li);        // пеш аз list (ҳамчун ҳамсоя)
list.after(li);         // пас аз list
list.append(a, b, "матн");   // якчандторо якбора, сатрҳо матн мешаванд

Як элемент дар ду ҷо истода наметавонад: агар li-и аллакай гузошташударо боз гузоред, вай ба ҷои нав мекӯчад.

Хориҷ кардан ва тоза кардан

li.remove();                 // элементро аз саҳифа хориҷ кардан
list.replaceChildren();      // ҳамаи фарзандонро хориҷ кардан
list.innerHTML = "";         // ҳамон чиз, ин ҳам зиёд вомехӯрад

Кашидани рӯйхат аз массив

Усули аз ҳама маъмул: функсияи render, ки контейнерро тоза мекунад ва онро аз рӯи массив аз нав месозад. Маълумот тағйир ёфт — render()-ро боз даъват карданд.

const tasks = ["Зарф шустан", "Дарс тайёр кардан", "Сайр кардан"];

function render() {
  const list = document.querySelector("#todo");
  list.replaceChildren();
  for (const text of tasks) {
    const li = document.createElement("li");
    li.textContent = text;
    list.append(li);
  }
}

render();
tasks.push("Китоб хондан");
render();

Ҳама чизро аз нав сохтан нисбат ба ёфтан ва иваз кардани бандҳои алоҳида соддатар аст, ва барои рӯйхатҳои хурд ин зуд аст. Маҳз ҳамин идея — «интерфейс функсияи маълумот аст» — баъдтар дар React ва Vue ба камол мерасад.

Чаро на бо сатр тавассути innerHTML

Нишонагузориро бо сатр ҷамъ кардан мумкин аст:

list.innerHTML = tasks.map((t) => `<li>${t}</li>`).join("");

Ин кӯтоҳ, вале хатарнок аст: агар матн аз корбар омада бошад ва тегҳо дошта бошад, онҳо иҷро мешаванд (XSS). createElement + textContent ҳамеша бехатаранд — тегҳо дар матн ҳамчун матн мемонанд. Сатрҳо бо innerHTML танҳо барои нишонагузории худ, ки пешакӣ маълум аст, ҷоизанд.

Тугма дар дохили элементи сохташуда

Коркардкунандаҳоро ба элементҳо дарҳол пас аз сохтан овехтан мумкин аст — замима (closure) дар хотир медорад, ки тугма ба кадом банд тааллуқ дорад:

function addTask(text) {
  const li = document.createElement("li");
  li.append(text + " ");

  const done = document.createElement("button");
  done.textContent = "✓";
  done.addEventListener("click", () => li.classList.toggle("done"));

  li.append(done);
  document.querySelector("#todo").append(li);
}

Ҳар li тугмаи худро дорад, ва ҳар тугма li-и худро дар хотир медорад.

Хулоса

  • document.createElement("тег") — элементи нав; то гузошта нашавад, намоён нест.
  • append / prepend / before / after — гузоштан; remove() — хориҷ кардан; replaceChildren() — тоза кардан.
  • Рӯйхат аз массив: контейнерро тоза кардан ва элементҳоро дар давра сохтан — функсияи render().
  • Матни корбар — танҳо тавассути textContent, на тавассути innerHTML.

Банди нав

Осон+10 XP

Функсияи addItem(text)-ро нависед: он <li>-и навро бо ҳамин матн месозад ва онро ба охири рӯйхати #list илова мекунад. Функсия элементи сохташударо бармегардонад.

addItem("Bread")  →  Milk, Bread
addItem("Eggs")   →  Milk, Bread, Eggs

Барои ҳал кардани масъалаҳо коннекторро пайваст кун

Коди масъалаҳо дар компютери худат иҷро мешавад — ин аз браузер тезтар ва боэътимодтар аст. Барои ин барномаи ройгони коннектори CodeWithMe лозим аст. Онро як бор пайваст кардан кифоя аст.

Коннекторро дар ин компютер ҷустуҷӯ мекунем…

  1. 1
    Коннекторро барои системаи худ (Windows, macOS ё Linux) зеркашӣ кун.Зеркашии коннекторДар саҳифаи зеркашӣ файлеро интихоб кун, ки дар номаш системаи ту ҳаст, масалан windows-amd64.
  2. 2Онро иҷро кун ва ҷузвдонеро интихоб кун, ки ҳалҳоят дар он ҷо меистанд. Python ва Node.js-ро ӯ худаш ҳангоми зарурат ба он ҷо мегузорад.
  3. 3
    Дар поён рамзи 6-рақамаро ворид кун — он дар равзанаи коннектор навишта шудааст («Рамз барои сайти CodeWithMe»). Агар браузер дар бораи дастрасӣ ба шабакаи маҳаллӣ пурсад — иҷозат деҳ.

Коннектор кушода аст (рамзи манбаъ дар GitHub), танҳо дар компютери ту кор мекунад ва кодро танҳо пас аз ворид кардани рамзи пайвастшавӣ иҷро мекунад.