val name jquery search live tablerow

name jquery val()



Búsqueda en vivo a través de filas de la tabla (12)

Aquí está la versión pura de Javascript con la búsqueda EN DIRECTO de TODAS LAS COLUMNAS :

function search_table(){ // Declare variables var input, filter, table, tr, td, i; input = document.getElementById("search_field_input"); filter = input.value.toUpperCase(); table = document.getElementById("table_id"); tr = table.getElementsByTagName("tr"); // Loop through all table rows, and hide those who don''t match the search query for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td") ; for(j=0 ; j<td.length ; j++) { let tdata = td[j] ; if (tdata) { if (tdata.innerHTML.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; break ; } else { tr[i].style.display = "none"; } } } } }

Quiero hacer una búsqueda en vivo a través de las filas de la tabla, usando jQuery, la palabra "en vivo" es la clave, porque quiero escribir las palabras clave en la entrada de texto, en el mismo sitio y me gustaría que jQuery clasifique automáticamente ( o eliminar aquellos que no coinciden con la consulta de búsqueda) las filas de la tabla.

Aquí está mi HTML:

<table> <tr><th>Unique ID</th><th>Random ID</th></tr> <tr><td>214215</td><td>442</td></tr> <tr><td>1252512</td><td>556</td></tr> <tr><td>2114</td><td>4666</td></tr> <tr><td>3245466</td><td>334</td></tr> <tr><td>24111</td><td>54364</td></tr> </table>

Y si lo quisiera. buscar por la Unique ID , debe mostrar las únicas filas que comienzan desde el número determinado para la identificación única. Fe. si escribiera ''2'' en el cuadro de entrada de búsqueda, las siguientes filas deberían permanecer, ya que comienzan con 2 :

<table> <tr><th>Unique ID</th><th>Random ID</th></tr> <tr><td>214215</td><td>442</td></tr> <tr><td>2114</td><td>4666</td></tr> <tr><td>24111</td><td>54364</td></tr> </table>

Si escribiera 24 , entonces debería haber solo una fila visible, ya que comienza desde el 24 :

<table> <tr><th>Unique ID</th><th>Random ID</th></tr> <tr><td>24111</td><td>54364</td></tr> </table>

Si pudieran darme algunos consejos sobre cómo hacer algo como esto, lo apreciaría muchísimo.

Gracias.


Aquí hay algo que puedes hacer con Ajax, PHP y JQuery. Espero que esto te ayude o te dé un comienzo. Verifica la consulta de mysql en php. Coincide con el patrón comenzando desde el principio.

Vea la demostración en vivo y el código fuente aquí.

http://purpledesign.in/blog/to-create-a-live-search-like-google/

Cree un cuadro de búsqueda, puede ser un campo de entrada como este.

<input type="text" id="search" autocomplete="off">

Ahora necesitamos escuchar lo que escriba el usuario en el área de texto. Para esto, usaremos jquery live () y el evento keyup. En cada keyup tenemos una función de búsqueda "búsqueda" que ejecutará un script php.

Supongamos que tenemos el html así. Tenemos un campo de entrada y una lista para mostrar los resultados.

<div class="icon"></div> <input type="text" id="search" autocomplete="off"> <ul id="results"></ul>

Tenemos un script de Jquery que escuchará el evento keyup en el campo de entrada y, si no está vacío, invocará la función search (). La función search () ejecutará el script php y mostrará el resultado en la misma página usando AJAX.

Aquí está el JQuery.

$(document).ready(function() { // Icon Click Focus $(''div.icon'').click(function(){ $(''input#search'').focus(); }); //Listen for the event $("input#search").live("keyup", function(e) { // Set Timeout clearTimeout($.data(this, ''timer'')); // Set Search String var search_string = $(this).val(); // Do Search if (search_string == '''') { $("ul#results").fadeOut(); $(''h4#results-text'').fadeOut(); }else{ $("ul#results").fadeIn(); $(''h4#results-text'').fadeIn(); $(this).data(''timer'', setTimeout(search, 100)); }; }); // Live Search // On Search Submit and Get Results function search() { var query_value = $(''input#search'').val(); $(''b#search-string'').html(query_value); if(query_value !== ''''){ $.ajax({ type: "POST", url: "search_st.php", data: { query: query_value }, cache: false, success: function(html){ $("ul#results").html(html); } }); }return false; }

}); En php, dispara una consulta a la base de datos mysql. El php devolverá los resultados que se pondrán en el html usando AJAX. Aquí el resultado se coloca en una lista html.

Supongamos que hay una base de datos ficticia que contiene dos tablas animales y aves con dos nombres de columnas similares ''tipo'' y ''desc''.

//search.php // Credentials $dbhost = "localhost"; $dbname = "live"; $dbuser = "root"; $dbpass = ""; // Connection global $tutorial_db; $tutorial_db = new mysqli(); $tutorial_db->connect($dbhost, $dbuser, $dbpass, $dbname); $tutorial_db->set_charset("utf8"); // Check Connection if ($tutorial_db->connect_errno) { printf("Connect failed: %s/n", $tutorial_db->connect_error); exit(); $html = ''''; $html .= ''<li class="result">''; $html .= ''<a target="_blank" href="urlString">''; $html .= ''<h3>nameString</h3>''; $html .= ''<h4>functionString</h4>''; $html .= ''</a>''; $html .= ''</li>''; $search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST[''query'']); $search_string = $tutorial_db->real_escape_string($search_string); // Check Length More Than One Character if (strlen($search_string) >= 1 && $search_string !== '' '') { // Build Query $query = "SELECT * FROM animals WHERE type REGEXP ''^".$search_string."'' UNION ALL SELECT * FROM birf WHERE type REGEXP ''^".$search_string."''" ; $result = $tutorial_db->query($query); while($results = $result->fetch_array()) { $result_array[] = $results; } // Check If We Have Results if (isset($result_array)) { foreach ($result_array as $result) { // Format Output Strings And Hightlight Matches $display_function = preg_replace("/".$search_string."/i", "<b class=''highlight''>".$search_string."</b>", $result[''desc'']); $display_name = preg_replace("/".$search_string."/i", "<b class=''highlight''>".$search_string."</b>", $result[''type'']); $display_url = ''https://www.google.com/search?q=''.urlencode($result[''type'']).''&ie=utf-8&oe=utf-8''; // Insert Name $output = str_replace(''nameString'', $display_name, $html); // Insert Description $output = str_replace(''functionString'', $display_function, $output); // Insert URL $output = str_replace(''urlString'', $display_url, $output); // Output echo($output); } }else{ // Format No Results Output $output = str_replace(''urlString'', ''javascript:void(0);'', $html); $output = str_replace(''nameString'', ''<b>No Results Found.</b>'', $output); $output = str_replace(''functionString'', ''Sorry :('', $output); // Output echo($output); } }


Aquí hay una versión que busca ambas columnas.

$("#search").keyup(function () { var value = this.value.toLowerCase().trim(); $("table tr").each(function (index) { if (!index) return; $(this).find("td").each(function () { var id = $(this).text().toLowerCase().trim(); var not_found = (id.indexOf(value) == -1); $(this).closest(''tr'').toggle(!not_found); return not_found; }); }); });

demo: http://jsfiddle.net/rFGWZ/369/


Así es cómo vivo en una tabla html:
<input type = ''text'' onkeyup = "filterTo (this.value, ''myTable'')" placeholder = ''Search ...''>
<table id = ''myTable''> ... </ table>

function filterTo(input, table) { var tr = document.getElementById(table).getElementsByTagName(''tr''); for (var i = 1; i < tr.length; i++) { var td = tr[i].getElementsByTagName(''td''); var hide = true; for (var j=0; j<td.length; j++) { if (td[j].innerHTML.toUpperCase().indexOf(input.toUpperCase()) > -1) { hide=false; break } } tr[i].style.display = hide ? ''none'' : ''''; } }


Debajo de la función JS que puede usar para filtrar la fila en función de algunas columnas especificadas, consulte searchColumn array. Se toma de la escuela w3 y se personaliza un poco para buscar y filtrar en la lista de columnas dada.

Estructura de HTML

<input style="float: right" type="text" id="myInput" onkeyup="myFunction()" placeholder="Search" title="Type in a name"> <table id ="myTable"> <thead class="head"> <tr> <th>COL 1</th> <th>CoL 2</th> <th>COL 3</th> <th>COL 4</th> <th>COL 5</th> <th>COL 6</th> </tr> </thead> <tbody> <tr> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </tbody>

function myFunction() { var input, filter, table, tr, td, i; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); table = document.getElementById("myTable"); tr = table.getElementsByTagName("tr"); var searchColumn=[0,1,3,4] for (i = 0; i < tr.length; i++) { if($(tr[i]).parent().attr(''class'')==''head'') { continue; } var found = false; for(var k=0;k<searchColumn.length;k++){ td = tr[i].getElementsByTagName("td")[searchColumn[k]]; if (td) { if (td.innerHTML.toUpperCase().indexOf(filter) > -1 ) { found=true; } } } if(found==true) { tr[i].style.display = ""; } else{ tr[i].style.display = "none"; } } }


No estoy seguro de qué tan eficiente es esto, pero esto funciona:

$("#search").on("keyup", function() { var value = $(this).val(); $("table tr").each(function(index) { if (index != 0) { $row = $(this); var id = $row.find("td:first").text(); if (id.indexOf(value) != 0) { $(this).hide(); } else { $(this).show(); } } }); });​

DEMO - Búsqueda en vivo en la tabla

Agregué una lógica de resaltado simplista que usted o futuros usuarios pueden encontrar útil.

Una de las formas de agregar algunos resaltados básicos es envolviendo las etiquetas em en el texto coincidente y usando CSS se aplica un fondo amarillo al texto coincidente, es decir: ( em{ background-color: yellow } ), similar a esto:

// removes highlighting by replacing each em tag within the specified elements with it''s content function removeHighlighting(highlightedElements){ highlightedElements.each(function(){ var element = $(this); element.replaceWith(element.html()); }) } // add highlighting by wrapping the matched text into an em tag, replacing the current elements, html value with it function addHighlighting(element, textToHighlight){ var text = element.text(); var highlightedText = ''<em>'' + textToHighlight + ''</em>''; var newText = text.replace(textToHighlight, highlightedText); element.html(newText); } $("#search").on("keyup", function() { var value = $(this).val(); // remove all highlighted text passing all em tags removeHighlighting($("table tr em")); $("table tr").each(function(index) { if (index !== 0) { $row = $(this); var $tdElement = $row.find("td:first"); var id = $tdElement.text(); var matchedIndex = id.indexOf(value); if (matchedIndex != 0) { $row.hide(); } else { //highlight matching text, passing element and matched text addHighlighting($tdElement, value); $row.show(); } } }); });

Demo : aplicar algunos resaltados simples


Si alguna celda en una fila contiene la frase o palabra buscada, esta función muestra esa fila, de lo contrario, la oculta.

<input type="text" class="search-table"/> $(document).on("keyup",".search-table", function () { var value = $(this).val(); $("table tr").each(function (index) { $row = $(this); $row.show(); if (index !== 0 && value) { var found = false; $row.find("td").each(function () { var cell = $(this).text(); if (cell.indexOf(value.toLowerCase()) >= 0) { found = true; return; } }); if (found === true) { $row.show(); } else { $row.hide(); } } }); });


Tomé la respuesta de yckart y:

  • espaciado para la legibilidad
  • búsqueda insensible a mayúsculas
  • hubo un error en la comparación que se solucionó al agregar .trim ()

(Si coloca las secuencias de comandos en la parte inferior de la página debajo de jQuery, incluya que no necesita el documento listo)

jQuery:

<script> $(".card-table-search").keyup(function() { var value = this.value.toLowerCase().trim(); $(".card-table").find("tr").each(function(index) { var id = $(this).find("td").first().text().toLowerCase().trim(); $(this).toggle(id.indexOf(value) !== -1); }); }); </script>

Si desea extender esto, haga que itere sobre cada ''td'' y haga esta comparación.


Una vieja pregunta, pero descubro cómo hacerlo más rápido. Para mi ejemplo: tengo aproximadamente 10k de datos en mi tabla, así que necesito una máquina de búsqueda rápida.

Aquí esta lo que hice:

$(''input[name="search"]'').on(''keyup'', function() { var input, filter, tr, td, i; input = $(this); filter = input.val().toUpperCase(); tr = $("table tr"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[0]; // <-- change number if you want other column to search if (td) { if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; } else { tr[i].style.display = "none"; } } } })

Espero que ayude a alguien.


Utilicé las respuestas anteriores y las combiné para crear:

Buscar cualquier columna por ocultar filas y resaltar

Css para resaltar textos encontrados:

em { background-color: yellow }

Js:

function removeHighlighting(highlightedElements) { highlightedElements.each(function() { var element = $(this); element.replaceWith(element.html()); }) } function addHighlighting(element, textToHighlight) { var text = element.text(); var highlightedText = ''<em>'' + textToHighlight + ''</em>''; var newText = text.replace(textToHighlight, highlightedText); element.html(newText); } $("#search").keyup(function() { var value = this.value.toLowerCase().trim(); removeHighlighting($("table tr em")); $("table tr").each(function(index) { if (!index) return; $(this).find("td").each(function() { var id = $(this).text().toLowerCase().trim(); var matchedIndex = id.indexOf(value); if (matchedIndex === 0) { addHighlighting($(this), value); } var not_found = (matchedIndex == -1); $(this).closest(''tr'').toggle(!not_found); return not_found; }); }); });

Demo here


Utilizando la respuesta de yckart , logré buscar toda la tabla, todas las td.

$("#search").keyup(function() { var value = this.value; $("table").find("tr").each(function(index) { if (index === 0) return; var if_td_has = false; //boolean value to track if td had the entered key $(this).find(''td'').each(function () { if_td_has = if_td_has || $(this).text().indexOf(value) !== -1; //Check if td''s text matches key and then use OR to check it for all td''s }); $(this).toggle(if_td_has); }); });


François Wahl se acerca , pero un poco más corto:

$("#search").keyup(function() { var value = this.value; $("table").find("tr").each(function(index) { if (!index) return; var id = $(this).find("td").first().text(); $(this).toggle(id.indexOf(value) !== -1); }); });

http://jsfiddle.net/ARTsinn/CgFd9/