Buscar contenido en una tabla con función Javascript 14/05/2023
Buscar:
| Columna 1 | Columna 2 |
|---|---|
| Uno | Primero |
| Dos | Segundo |
| Tres | Tercero |
<div class="buscadorTablaJs">
<div>
Buscar: <input id="buscarPalabra" type="text" placeholder="Texto a buscar ..." onkeyup="aBuscar()" />
</div>
<table id="tablaDatos">
<thead>
<tr><th>Columna 1</th><th>Columna 2</th></tr>
</thead>
<tbody>
<tr><td>Uno</td><td>Primero</td></tr>
<tr><td>Dos</td><td>Segundo</td></tr>
<tr><td>Tres</td><td>Tercero</td></tr>
</tbody>
<tfoot>
<tr class='noBuscar hide'><td colspan="2"></td></tr>
</tfoot>
</table>
</div>
colspan="2": La celda ocupará dos columnas
.buscadorTablaJs{margin:2rem auto;border:1px solid #D4D2D2;border-radius:10px;width:80%;padding:20px;box-shadow:5px 5px 12px black}
.buscadorTablaJs>div,
.buscadorTablaJs>div>input{font-size: 1.5rem;}
.buscadorTablaJs>div{font-weight: bold;text-align: center;}
.buscadorTablaJs>table{margin:2rem auto;width: 100%;}
.buscadorTablaJs>table th{background: #535353;color: #fff;font-size: 1.2rem;text-transform:uppercase;}
.buscadorTablaJs>table tbody tr:nth-child(even){background: #ededfb;}
.buscadorTablaJs>table tbody tr:hover{background: #dcf8df;}
.buscadorTablaJs>table tbody td{padding: 5px;}
.noBuscar{font-size:1.5rem;font-weight: bold;}
.hide {display:none;}
.red{color: #F00;}
function aBuscar()
{
const tableReg = document.getElementById('tablaDatos');
const searchText = document.getElementById('buscarPalabra').value.toLowerCase();
let total = 0;
// Recorremos todas las filas con contenido de la tabla
for (let i = 1; i < tableReg.rows.length; i++) {
// Si el td tiene la clase "noBuscar" no se busca en su contenido
if (tableReg.rows[i].classList.contains("noBuscar")) {
continue;
}
let found = false;
const cellsOfRow = tableReg.rows[i].getElementsByTagName('td');
// Recorremos todas las celdas
for (let j = 0; j < cellsOfRow.length && !found; j++) {
const compareWith = cellsOfRow[j].innerHTML.toLowerCase();
// Buscamos el texto en el contenido de la celda
if (searchText.length == 0 || compareWith.indexOf(searchText) > -1) {
found = true;
total++;
}
}
if (found) {
tableReg.rows[i].style.display = '';
} else {
// si no ha encontrado ninguna coincidencia, esconde la
// fila de la tabla
tableReg.rows[i].style.display = 'none';
}
}
// mostramos las coincidencias
const lastTR=tableReg.rows[tableReg.rows.length-1];
const td=lastTR.querySelector("td");
lastTR.classList.remove("hide", "red");
if (searchText == "") {
lastTR.classList.add("hide");
} else if (total) {
td.innerHTML="Se ha encontrado "+total+" coincidencia"+((total>1)?"s":"");
} else {
lastTR.classList.add("red");
td.innerHTML="No se han encontrado coincidencias";
}
}
