Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
index.html
Tab = 4 espacios
1
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Crear y Eliminar Nodos del DOM</title>
  <style>
    body { font-family: Arial, Helvetica, sans-serif; padding: 25px; background: #f8fafc; }
    .card-tareas { max-width: 520px; background: white; border: 1px solid #cbd5e1; border-radius: 8px; padding: 22px; }
    .input-fila { display: flex; gap: 8px; margin-bottom: 15px; }
    input[type="text"] { flex: 1; padding: 9px 12px; border: 1px solid #cbd5e1; border-radius: 6px; }
    button.btn-add { background: #0284c7; color: white; border: none; padding: 9px 16px; border-radius: 6px; cursor: pointer; font-weight: bold; }
    button.btn-add:hover { background: #0369a1; }
    ul { list-style: none; padding: 0; margin: 0; }
    li.tarea-item { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; margin-bottom: 8px; transition: all 0.2s; }
    li.tarea-item:hover { background: #f1f5f9; border-color: #cbd5e1; }
    .btn-borrar { background: #fee2e2; color: #dc2626; border: 1px solid #fca5a5; padding: 4px 10px; border-radius: 4px; cursor: pointer; font-weight: bold; font-size: 0.8rem; }
    .btn-borrar:hover { background: #ef4444; color: white; }
    .contador-info { font-size: 0.85rem; color: #64748b; margin-top: 10px; }
  </style>
</head>
<body>

  <div class="card-tareas">
    <h3 style="margin-top: 0; color: #0f172a;">Lista Interactiva de Tareas</h3>

    <div class="input-fila">
      <input type="text" id="campo-tarea" placeholder="Escribe una nueva tarea...">
      <button class="btn-add" onclick="agregarTarea(false)">+ Al Final</button>
      <button class="btn-add" style="background: #0d9488;" onclick="agregarTarea(true)">+ Al Inicio</button>
    </div>

    <ul id="lista-tareas"></ul>
    <div class="contador-info" id="info-contador">0 tareas registradas</div>
  </div>

  <script>
    let contadorId = 0;

    function actualizarContador() {
      const cantidad = document.querySelectorAll('#lista-tareas li').length;
      document.getElementById('info-contador').textContent = `${cantidad} tareas registradas`;
    }

    function agregarTarea(alInicio) {
      const input = document.getElementById('campo-tarea');
      const texto = input.value.trim();

      if (texto === "") {
        alert("Escribe una descripción para la tarea.");
        return;
      }

      contadorId++;

      // 1. createElement para crear el nodo <li>
      const li = document.createElement('li');
      li.className = 'tarea-item';

      // 2. createElement para el span con el texto
      const span = document.createElement('span');
      span.textContent = `#${contadorId} · ${texto}`;

      // 3. createElement para el botón de eliminar
      const btnEliminar = document.createElement('button');
      btnEliminar.className = 'btn-borrar';
      btnEliminar.textContent = '✕ Eliminar';

      // Evento para eliminar el nodo con .remove()
      btnEliminar.addEventListener('click', function() {
        li.remove();
        actualizarContador();
      });

      // Ensamblar los elementos hijos
      li.appendChild(span);
      li.appendChild(btnEliminar);

      // 4. Inserción condicional al inicio (prepend) o al final (appendChild)
      const lista = document.getElementById('lista-tareas');
      if (alInicio) {
        lista.prepend(li);
      } else {
        lista.appendChild(li);
      }

      input.value = "";
      input.focus();
      actualizarContador();
    }

    // Inicializar con dos tareas de ejemplo
    document.getElementById('campo-tarea').value = "Configurar entorno de desarrollo";
    agregarTarea(false);
    document.getElementById('campo-tarea').value = "Aprender selectores del DOM";
    agregarTarea(false);
  </script>

</body>
</html>
Haz clic para editar este código
Vista Previa
Consola Virtual JavaScript