Foros del Web » Programando para Internet » Javascript »

buscar elementos dentro de un select

Estas en el tema de buscar elementos dentro de un select en el foro de Javascript en Foros del Web. hola, pueden ayudarme a mejorar este script: cuando en una caja de texto escribo esto "h" ,hago una busqueda por todos los items cuyo nombre ...
  #1 (permalink)  
Antiguo 26/02/2007, 15:46
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 2
buscar elementos dentro de un select

hola, pueden ayudarme a mejorar este script:

cuando en una caja de texto escribo esto "h" ,hago una busqueda por todos los items cuyo nombre empieza por esa letra, atravez del AJAX a mi BD de MySQL y me devuele un array, ese array lo devuelvo a Javascript gracias a JSON, y el resultado lo muestro en un select:

Código HTML:
<select id="items" > 
<option>htp barniz</option>
<option>hidroxido</option>
<option>htp pinturas color verde</option>
<option>htp pinturas color rojo</option>
<option>hexano</option>
<option>he sellador</option>
<option>htp pinturas color azul</option>
 </select> 
ahora cada vez que sigo escribiendo por ejemplo "he" me debe quedar asi:
Código HTML:
<select id="items" > 
<option>hexano</option>
<option>he sellador</option>
 </select> 
y sigo escribiendo "hex" me debe quedar asi:

Código HTML:
<select id="items" > 
<option>hexano</option>
</select> 
eso ya lo logre ya que como ya tenia a los items que queria dentro del select
simplemente elimine a los que no coincidian

Código PHP:
//select donde estan los elementos
var sele=document.getElementById('lista_items');

//caja de texto donde escribo
var x=document.getElementById('arti').value;    
var 
tv=x.toUpperCase();
var 
item_name;    
var 
item_name2;

///para leer todas los option y saber si deben ser eliminados
for (var pss=sele.length-1;pss>=0;pss--)
{
item_name=sele.options[pss].text.substr(0,tv.length);
//tambien lo convierto a mayusculas
item_name=item_name.toUpperCase();
///como ya tengo a los productos, solo busco 
a los que no empiezan
//por la letra especifica
if (item_name!=tv)    
{
                    
sele.remove(pss);

}


Y asi me quedo solo con los que necesito.

Esta alli todo bien, ya que no es necesario hacer denuevo una consulta SQL y no sobrecargo el servidor, pero en vez de seguir escribiendo voy borrando, quedando asi: "he"

el select de nuevo me queda asi

Código HTML:
<select id="items" > 
<option>hexano</option>
<option>he sellador</option>
 </select> 
y si borro la "e" quedando la "h" me quedaria de nuevo asi:

Código HTML:
<select id="items" > 
<option>htp barniz</option>
<option>hidroxido</option>
<option>htp pinturas color verde</option>
<option>htp pinturas color rojo</option>
<option>hexano</option>
<option>he sellador</option>
<option>htp pinturas color azul</option>
 </select> 
Eso tambien lo logre de esta manera:

Código PHP:
//Primero borro a todos los elementos

var sel=document.getElementById('lista_items');

for (var 
ps=sel.length-1;ps>=0;ps--)
    {
    
sel.remove(ps);
    }


//ahora voy creando los options con los items que necesito
// "aglobal" es una variable global que tiene a todos los items 
encontrados en la primera busqueda.

for (var 
q2=aglobal.length-1;q2>=0;q2--)
    {
        
var 
item_nomb=aglobal[q2].item_nomb.substr(0,tv.length);    
item_nomb=item_nomb.toUpperCase();

///para volver a poner solo los que coincidan con las letras                
    
if (item_nomb==tv)    
    {
        
    var 
op2=document.createElement('<option>');
    var 
nom2=document.createTextNode(item_nomb);
    
sel.appendChild(op2);
    
op2.appendChild(nom2);
/
concateno el codigonombre y precio porque luego los voy a separar
///para utilizarlos
op2.setAttribute('value',aglobal[q2].item_nomb+'@'+aglobal[q2].item_pvt1+'@'+aglobal[q2].item_codi);        
            
            }
                                                    
         } 
Como dije con esto ya logre y todo va OK,pero eso de borrar todos los elementos y volver a poner los que pertenecen pues lo hace un poco lento y estaba pensando en la forma de guardar los elementos eliminados en una array, para luego cuando los necesite ponerlos.Pero aun no hallo la logica.
solo voy logrando esto:

Código PHP:
items_eli.push(sele.options[pss].value); 
con esto voy guardando los elementos antes de eliminarlos

Pero me falta un poco para hallar toda la logica

pueden ayudarme?

Es que necesito que la busqueda sea los mas rapido posible ya que en ese select tendre muchos elementos
  #2 (permalink)  
Antiguo 27/02/2007, 12:43
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: buscar elementos dentro de un select

Podrías guardar todos los elementos del select en un array y cuando insertes algo para buscar filtrar todos los que quieras:

Ejemplo: en la caja se escribe "he", entonces sólo se muestran los registros que coincidan con la expresión regular "^he". Y así cada vez, creo que sería más fácil que andar quitando y poniendo elementos...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 27/02/2007, 17:35
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: buscar elementos dentro de un select

Cita:
Podrías guardar todos los elementos del select en un array y cuando insertes algo para buscar filtrar todos los que quieras:

Ejemplo: en la caja se escribe "he", entonces sólo se muestran los registros que coincidan con la expresión regular "^he". Y así cada vez, creo que sería más fácil que andar quitando y poniendo elementos...
Tienes razon, la verdad eso no se me ocurrio porque no manejo muy bien el tema de expresiones regulares, pero ahora mismo buscare informacion para realizarlo.

GRACIAS.
  #4 (permalink)  
Antiguo 28/02/2007, 10:27
 
Fecha de Ingreso: diciembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: buscar elementos dentro de un select

La verda ha buscado informacion, pero aun no me sale, podrias ponerme un pequeño ejemplo para que busque en un array.
  #5 (permalink)  
Antiguo 01/03/2007, 17:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: buscar elementos dentro de un select

La técnica para buscar un array sería ir recorriendo elemento por elemento hasta que coincidiese con lo que buscas. Tendrías que hacer un bucle for con una condicional dentro, y si se verifica que el elemento actual es igual al elemento a buscar, detener el bucle y devolver el índice en el que nos encontremos.

Inténtalo y postea tus progresos.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 06:50.