Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Mostrando y ocultando capas con text input

Estas en el tema de Mostrando y ocultando capas con text input en el foro de Jquery en Foros del Web. Buenas a todos, Estoy haciendo un listado de ingredientes con fotos en pequeñas fichas. El caso es que muestro en una página esas fichas y ...
  #1 (permalink)  
Antiguo 07/03/2014, 05:36
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 7 meses
Puntos: 1
Mostrando y ocultando capas con text input

Buenas a todos,

Estoy haciendo un listado de ingredientes con fotos en pequeñas fichas. El caso es que muestro en una página esas fichas y puede haber en algunos casos como 30 ingredientes. Mi idea entonces es poner un text input encima del todo el listado y al ir escribiendo sólo se van mostrando los ingredientes que tengan en el nombre lo escrito en el input. Sería así la organización de las capas principales de manera muy resumida:

Código HTML:
Ver original
  1. <input type="text" id="buscar">
  2.  
  3. <div><span>Arroz</span></div>
  4. <div><span>Sal</span></div>
  5. <div><span>Pimienta</span></div>
  6. <div><span>Pollo</span></div>
  7. <div><span>Poleo</span></div>

Entonces al empezar a escribir "A" se mostraría solo la capa div con todo el contenido donde el span es Arroz. Si empiezo a escribir "P" pues se mostrarían sólo los div de Pimienta, Pollo y Poleo... si sigo con "Po" pues sólo se ven los de Pollo y Poleo. No se si me explico. Pero también se mostraría sólo, por ejemplo la de pollo si escribo "llo" ya que es la única que lo contiene.

¿Conocéis algún recurso o algo parecido? ¿O alguna idea en jQuery para implementarlo?
  #2 (permalink)  
Antiguo 07/03/2014, 09:46
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Mostando y ocultando capas con text input

Puedes usar algún plugin de auto completar. Aqui hay un articulo de como implementar uno: http://designshack.net/articles/java...-html5-jquery/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 07/03/2014, 11:59
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Mostrando y ocultando capas con text input

Creo que buscas hacer algo como esto. Sería más sencillo si lo hicieras filtrando los datos con una consulta a una base de datos pues ahí existe el operador de comparación LIKE, el cual permite hacer búsquedas entre los datos almacenados en la base de datos con cualquier caracter escrito en una caja de texto. Sin embargo, he realizado en JavaScript algo que emula dicho comportamiento.

Código HTML:
Ver original
  1. <label for = "buscar">Escribe el nombre del plato:</label>
  2. <input type = "text" id = "buscar" placeholder = "Nombre del plato" autofocus />
  3.     <div>
  4.         <img src = "lentejas.jpg" />
  5.         <span>Lentejas con arroz</span>
  6.     </div>
  7.     <div>
  8.         <img src = "espinacas.jpg" />
  9.         <span>Ensalada de espinacas</span>
  10.     </div>
  11.     <div>
  12.         <img src = "frutas.jpg" />
  13.         <span>Ensalada de frutas</span>
  14.     </div>
  15.     <div>
  16.         <img src = "trigo.jpg" />
  17.         <span>Guiso de trigo</span>
  18.     </div>
  19.     <div>
  20.         <img src = "tomate.jpg" />
  21.         <span>Encebollado con tomate</span>
  22.     </div>

Código Javascript:
Ver original
  1. var buscar = document.getElementById("buscar"),
  2.     platos = document.getElementsByTagName("span"),
  3.     forEach = Array.prototype.forEach;
  4.  
  5. buscar.addEventListener("keyup", function(e){
  6.     var texto = this.value;
  7.  
  8.     forEach.call(platos, function(p){
  9.         if (p.innerHTML.toLowerCase().search(texto.toLowerCase()) == -1)
  10.             p.parentNode.style.display = "none";        
  11.         else
  12.             p.parentNode.style.display = "block";        
  13.     });
  14. }, false);

El procedimiento es sencillo. Cada vez que el usuario suelte una tecla luego de pulsarla (evento keyup), se buscará por cada elemento <span> (que son los que contienen los nombres de cada plato), la coincidencia entre su contenido y el del texto escrito en la caja de texto, para lo cual, primero convertimos a minúsculas a ambos valores (método toLowerCase) para evitar diferencias con mayúsculas y luego, utilizando el método search, obtenemos la posición del texto escrito en el contenido de cada <span>. Para que se entienda mejor esto, el contenido de cada <span> equivale a un array de caracteres, en donde cada caracter es un elemento del array, por lo que la primera letra está ubicada en la posición cero. Por ejemplo, si escribo la palabra ensalada y el contenido del <span> es Ensalada de frutas, obtendremos la posición cero pues es en la que se ubica la palabra que escribimos con respecto al contenido del <span>, recordando siempre que la primera posición es cero.

Este método (search), devuelve -1 cuando no se encuentran coincidencias, por lo que si esto es así, ocultamos el nodo padre del <span> que viene siendo el <div>, caso contrario, lo mostramos.

Te dejo el código completo: http://jsfiddle.net/Alexis88/rEdSk/

Saludos

EDITO: Había olvidado que estamos en el sub-foro de jQuery.

Aquí tienes este mismo ejemplo pero implementado con la librería jQuery:

Código Javascript:
Ver original
  1. var platos = $("span");
  2.  
  3. $("#buscar").keyup(function(e){
  4.     var texto = $(this).val();
  5.  
  6.     platos.each(function(){
  7.         if ($(this).html().toLowerCase().search(texto.toLowerCase()) == -1)
  8.             $(this).parent().hide();
  9.         else
  10.             $(this).parent().show();
  11.     });
  12. });

El resultado es exactamente el mismo que con el código nativo de JS: http://jsfiddle.net/Alexis88/rY4HX/
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/03/2014 a las 13:39
  #4 (permalink)  
Antiguo 07/03/2014, 17:06
 
Fecha de Ingreso: septiembre-2007
Mensajes: 106
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: Mostrando y ocultando capas con text input

Espectaculares vuestras aportaciones, como siempre. Pruebo lo que me decís y os comento.

Etiquetas: capas, input, text
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:52.