Empecé a usar jQuery hace una semana y quería hacer algo como una búsqueda desde una tabla existente.
Al llamar a text() desde cualquier fila, muestra una cadena vacía '' lo que hace imposible comparar la cadena buscada con las existentes en la tabla.
Por ejemplo, el código siguiente devuelve 4 instancias de '' . ¿Cómo puedo arreglar esto?
$(document).ready(() => { $('#test tr').filter(() => { console.log($(this).text()); }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <table> <tbody id="test"> <tr> <td>example</td> <td>1</td> </tr> <tr> <td>example</td> <td>2</td> </tr> <tr> <td>example</td> <td>3</td> </tr> <tr> <td>example</td> <td>4</td> </tr> </tbody> </table>Hay dos problemas en su código. En primer lugar, está utilizando una función de flecha, por lo que this palabra clave apuntará al contexto externo, no al elemento tr dentro de la iteración. Para solucionar esto, use una función anónima o reciba el tr como argumento para la función de flecha. He hecho esto último en el siguiente ejemplo.
El segundo problema es que está utilizando filter() como un iterador, lo cual no es correcto. filter() debe usarse para reducir un conjunto de elementos dentro de un objeto jQuery. Como desea hacer un bucle en este caso, solo debe usar each() en su lugar.
jQuery($ => { $('#test tr').each((i, tr) => { console.log($(tr).text().trim()); }); }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <table> <tbody id="test"> <tr> <td>example</td> <td>1</td> </tr> <tr> <td>example</td> <td>2</td> </tr> <tr> <td>example</td> <td>3</td> </tr> <tr> <td>example</td> <td>4</td> </tr> </tbody> </table>