¿Cómo ocultar todas las filas excepto la seleccionada sin conocer la ID completa en JavaScript?

Dada una tabla HTML con un número determinado de filas, la tarea es ocultar todas las filas excepto la seleccionada sin conocer su ID mediante JavaScript.

Enfoque: Uso de los métodos querySelectorAll() , forEach() , addEventListener() y filter() y el operador de propagación (…) en JavaScript nativo. En primer lugar, seleccionamos todas las filas de la tabla excepto la fila del encabezado usando el método querySelectorAll(), pasando el selector tr:not(:first-child) como un parámetro de string. Iteramos a través de cada fila de la tabla usando el método forEach(). Ahora, para cada fila de la tabla, se adjunta un detector de eventos mediante el método addEventListener(), siendo el evento el evento de clic.

Dentro del detector de eventos, se declara una fila variable que almacena todos los elementos de la fila de la tabla en forma de array, ya que el operador de propagación se usa para convertir la lista de Nodes devuelta por el método querySelectorAll() en una array. Filtramos ciertas filas de todas las filas usando el método filter(), pasando un elemento de parámetro dentro de él. La condición para filtrar las filas es que si no se hace clic en la fila, debemos ocultarla usando la propiedad de visualización que se establece en el valor ninguno.

Ejemplo:

HTML

<!DOCTYPE html>
<html>
  
<head>
    <style>
        body {
            text-align: center;
        }
        h1 {
            color: green;
            font-size: 2.5rem;
        }
        p {
            font-size: 1.5rem;
            font-weight: bold;
        }
        table {
            margin: 0 auto;
        }
  
        table,
        th,
        td {
            border: 1px solid black;
            border-collapse: collapse;
        }
  
        th,
        td {
            padding: 0.5rem;
        }
        tr:not(:first-child) {
            cursor: pointer;
        }
        tr:not(:first-child):hover {
            background: green;
            color: white;
        }
    </style>
</head>
  
<body>
    <h1>GeeksforGeeks</h1>
    <p>JavaScript - Hide all rows except
       selected one without ID
    </p>
  
    <table>
        <tr>
            <th>Book Name</th>
            <th>Author Name</th>
            <th>Genre</th>
        </tr>
        <tr>
            <td>The Book Thief</td>
            <td>Markus Zusak</td>
            <td>Historical Fiction</td>
        </tr>
        <tr>
            <td>The Cruel Prince</td>
            <td>Holly Black</td>
            <td>Fantasy</td>
        </tr>
        <tr>
            <td>The Silent Patient</td>
            <td>Alex Michaelides</td>
            <td>Psychological Fiction</td>
        </tr>
    </table>
    <script>
        document.querySelectorAll(
  
          // Select all rows except the first one 
          "tr:not(:first-child)").forEach(function (e) {
  
            // Add onClick event listener
            // to selected rows
            e.addEventListener("click", function () {
  
                // Get all rows except the first one 
                var rows = 
                    [...document.querySelectorAll(
                      "tr:not(:first-child)"
                    )];
  
                var notSelectedRows = 
                    rows.filter(function (element) {
                      
                    // Hide the rows that have
                    // not been clicked
                    if (element !== e) {
                        element.style.display = "none";
                    }
                });
            });
        });
    </script>
</body>
  
</html>

Producción:

Publicación traducida automáticamente

Artículo escrito por rajatsandhu2001 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *