JavaScript Dasar

DOM & API

Manipulasi DOM dan penggunaan Fetch API dalam JavaScript

Tambahkan ke index.html (sebelum tag script)
<hr>
<div class="dom-demo p-4 my-4 border border-gray-300 rounded">
  <h2 class="text-xl font-bold mb-3">Demo Manipulasi DOM</h2>
  <div id="dom-output" class="mb-3"></div>
  <button id="btn-tambah-item" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">Tambah Item</button>
  <button id="btn-hapus-item" class="bg-red-500 text-white px-4 py-2 rounded hover:bg-red-600">Hapus Item</button>
  <button id="btn-ubah-warna" class="bg-green-500 text-white px-4 py-2 rounded hover:bg-green-600">Ubah Warna</button>
</div>
script.js (tambahkan di bawah kode sebelumnya)
// Manipulasi DOM
const domOutput = document.getElementById("dom-output");
let itemCount = 0;

// Fungsi untuk menambahkan item
document.getElementById("btn-tambah-item").addEventListener("click", function() {
  itemCount++;
  const newItem = document.createElement("div");
  newItem.className = "p-2 mb-2 bg-gray-100 rounded";
  newItem.innerText = `Item ${itemCount}`;
  domOutput.appendChild(newItem);
});

// Fungsi untuk menghapus item
document.getElementById("btn-hapus-item").addEventListener("click", function() {
  if (domOutput.lastChild) {
    domOutput.removeChild(domOutput.lastChild);
    itemCount--;
  }
});

// Fungsi untuk mengubah warna background
document.getElementById("btn-ubah-warna").addEventListener("click", function() {
  const colors = ["bg-blue-100", "bg-green-100", "bg-yellow-100", "bg-pink-100"];
  const randomColor = colors[Math.floor(Math.random() * colors.length)];
  domOutput.className = `p-4 mb-3 ${randomColor} rounded`;
});

Manipulasi DOM adalah salah satu fitur paling powerful dalam JavaScript. Dengan DOM manipulation, Kalian dapat membuat, mengubah, atau menghapus elemen HTML secara dinamis tanpa harus reload halaman.

Fetch API dan Async/Await

Pelajari cara menggunakan Fetch API dan async/await untuk mengambil data dari server:

Tambahkan ke index.html (sebelum tag script)
<hr>
<div class="api-demo p-4 my-4 border border-gray-300 rounded">
  <h2 class="text-xl font-bold mb-3">Demo Fetch API</h2>
  <button id="btn-fetch" class="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">Ambil Data</button>
  <div id="api-output" class="mt-3"></div>
</div>
script.js (tambahkan di bawah kode sebelumnya)
// Fetch API dengan async/await
document.getElementById("btn-fetch").addEventListener("click", async function() {
  try {
    const response = await fetch("https://jsonplaceholder.typicode.com/posts");
    const data = await response.json();
    const apiOutput = document.getElementById("api-output");
    apiOutput.innerHTML = "<h3 class='font-bold mb-2'>Daftar Post:</h3>";

    data.slice(0, 5).forEach(post => {
      apiOutput.innerHTML += `
        <div class="p-3 mb-2 bg-gray-100 rounded">
          <h4 class="font-semibold">${post.title}</h4>
          <p class="text-sm">${post.body}</p>
        </div>
      `;
    });
  } catch (error) {
    console.error("Error fetching data:", error);
    document.getElementById("api-output").innerHTML = `
      <div class="p-3 bg-red-100 text-red-800 rounded">
        Gagal mengambil data: ${error.message}
      </div>
    `;
  }
});

Fetch API adalah cara modern untuk melakukan HTTP requests di JavaScript. Kombinasi dengan async/await membuat kode asynchronous menjadi lebih mudah dibaca dan dipahami, mirip seperti kode synchronous.

Hasil Praktikum

Setelah menyelesaikan semua langkah praktikum, Kalian seharusnya telah:

  • Membuat file HTML dan JavaScript yang terhubung
  • Menggunakan variabel, tipe data, dan operator
  • Mengimplementasikan struktur kondisional dan loop
  • Membuat dan menggunakan fungsi
  • Menangani event dan memanipulasi DOM
  • Menggunakan array dan objek
  • Mengambil data dari API menggunakan Fetch API

Tips dan Best Practices

Perhatikan!

  • Selalu gunakan const untuk nilai yang tidak berubah, dan let untuk nilai yang berubah
  • Hindari penggunaan var kecuali ada kebutuhan khusus untuk backward compatibility
  • Gunakan === untuk comparison, bukan == untuk menghindari type coercion
  • Selalu handle error saat menggunakan async operations
  • Gunakan camelCase untuk penamaan variabel dan fungsi

Latihan

  1. Buat form input untuk menambahkan data mahasiswa baru dengan validasi form
  2. Implementasikan localStorage untuk menyimpan data mahasiswa secara persisten
  3. Tambahkan fitur search/filter pada daftar post dari API berdasarkan title
  4. Buat fitur dark mode toggle menggunakan manipulasi class CSS
  5. Implementasikan pagination untuk menampilkan data dari API dengan tombol "Previous" dan "Next"
  6. Buat aplikasi Todo List sederhana dengan fitur tambah, hapus, dan tandai selesai menggunakan DOM manipulation dan localStorage