Buscar temas sin respuesta | Ver temas activos Fecha actual 22 Oct 2017 05:34

Reglas del Foro


Es un foro abierto pero moderado, es decir que cualquier mensaje pasa por el moderador que borrará de inmediato todo lo que suene a spam.



Responder al tema  [ 5 mensajes ] 
 Al realizar busquedas ignorar los acentos 
Autor Mensaje
Tengo una búsqueda sobre un array y en este hay elementos con acentos, así que necesito que al escribir el texto de búsqueda en el input y realizar dicha búsqueda, no tenga en cuenta si en el texto escrito o en el que figura en el array las palabras están acentuadas o no y por tanto las encuentre de cualquier manera, pero lógicamente necesito que las muestre tal cual están escritas en el array.
La función de búsqueda me hace esto mismo pero con las mayúsculas, pero en el caso de los acentos no sé como hacerlo.
Esta es la función de búsqueda
Código:
 function busca(buscar) {
    encontrados=new Array();
   for(var i=0; i<nombre.length; i++) {
         var nodoLower=nombre[i][0].toLowerCase();
   if(nodoLower.indexOf(buscar.toLowerCase())!=-1) {
             encontrados.push(nombre[i]);
        }
    }


Saludos


22 Nov 2013 12:17
Site Admin

Registrado: 14 Sep 2012 07:50
Mensajes: 36
Sólo se me ocurre que cambies los acentos por letras sin acentos y luego compares
cadena ="león";
cadena_cmp = cadena.replace("á", "a");
cadena_cmp = cadena_cmp.replace("é", "e");
cadena_cmp = cadena_cmp.replace("í", "i");

Y así con todas las letras acentuadas. Es la forma más simple. También podrías crear un array asociativo. A cada letra acentuada le corresponde la misma sin acentuar.
acentos['á'] = 'a'
acentos['é'] = 'e'


De todas formas ¿has probado con localeCompare()?, este método compara la cadena con otra según el idioma definido en el navegador.

Saludos


24 Nov 2013 02:01
Perfil WWW
Siguiendo lo que me comentas he creado esta funcion
Código:
function reemplazaAcentos(cadena){ 
    var cadena_acentos = "áéíóú";
    var cadena_reemplaza = "aeiou";
    for(var i=0; i<cadena_acentos.length; i++ ){
        cadena = cadena.replace(cadena_acentos[i],cadena_reemplaza[i]);
    }
    return cadena;
}

Pero ahora, necesito integrarla en la función de búsqueda, que es la de abajo, como puedo integrar las dos funciones.
txtBuscar.value es el input donde se introduce el texto a buscar
Código:
function busqueda(){
var cadena=txtBuscar.value.toLowerCase();
    var n = nombre.length;
    buscarNombre = [];   
   for (var i=0;i<n;i++)
    {      
        if (nombre[i][1].toLowerCase().indexOf(cadena)>=0)
        {
            buscarNombre.push(datos[i]);
        }
    }
    txtResultados.innerHTML=buscarNombre.length;
    mostrarResultados(0);   
}


Saludos


25 Nov 2013 13:44
Site Admin

Registrado: 14 Sep 2012 07:50
Mensajes: 36
Hola
Pues yo cambiaría las cadenas que comparas con las cadenas sin acento

Tienes esto
nombre[i][1].toLowerCase().indexOf(cadena)

Lo desgloso y organizo un poco
buscaren = reemplazaAcentos(nombre[i][1])
loBuscado = reemplazaAcentos(cadena)

buscaren.toLowerCase().indexOf(loBuscado)

Es decir en lugar de usar las cadenas originales cámbialas por las modificadas (sin acentos)

Saludos


25 Nov 2013 18:57
Perfil WWW
Tu propuesta funciona perfectamente pero.....
Para dejar limpio el archivo HTML he pasado todo el código JavaScript a un archivo externo js y me ha dejado de funcionar, me explico, tengo creada una función para validar el texto que se introduce en el input y al poner una palabra acentuada para que la busque, que existe en el array y está acentuada me salta el alert de error de caracter no permitido y si la pongo sin acentuar me dice que no la encuentra, pero si esta función la dejo en el archivo HTML entonces la búsqueda funciona perfectamente.
No sé si es que esta función tiene que estar en el mismo archivo que el input.
También tengo que dejar en el archivo HTML la función reemplazaAcentos porque sino me dice que reemplazaAcentos no está definido.
Te pongo la función y el input

Código:
function filtrarResultados(){
    var reg = /^([a-z][a-z0-9 ñáéíóú]{2,10})$/i;   
   //valida que el texto del campo no sea el que aparece automáticamente al tener el foco
   if (txtBuscar.value == textoBusqueda){
      alert("\u00A1Por favor! \n escriba el texto de b\u00fasqueda");
      return false;
   //valida que el campo no esté vacío, no tenga sólo espacios en blanco, ni caracteres especiales   
   }else if(reg.test(txtBuscar.value) == 0){
        alert("El texto debe tener entre 3 y 10 \ncaracteres.\nNo empezar por un n\u00famero y \nNo contener caracteres especiales");   
      return false;
   }else   
      busqueda()
      return true;            
}

<input type="text" name=text1 id="buscador" size="30" maxlength="25" />


26 Nov 2013 20:35
Mostrar mensajes previos:  Ordenar por  
Responder al tema   [ 5 mensajes ] 

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Designed by ST Software for PTF.
Traducción al español por Huan Manwë para phpBB-Es.COM