búsqueda en el cliente
3 seguidores
¿hay alguna manera de realizar una búsqueda en los contenidos de la página por javascript? me refiero a algo similar a lo que hace el Ctrl+F en el IE de Windows
yo creo que no se puede, pero por preguntar... :)
meddle
si es de una pagina supongo que por expresiones regulares se podria hacer algo.
cbp
no lo entiendo :( ¿dices buscando una cadena en el innerHTML de todo el documento o algo así?
meddle
sastamente, aunque se puede hacer de varias maneras. si me preguntas algo mas especifico...
cbp
¿y cuales, por dios? ;)
sabía que esta pregunta la contestarías tú, jeje
meddle
a ver, preuba algo por el estilo:
<code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test Template</title>
<script type="text/javascript">
// <![CDATA[
window.onload = function(){
alert(document.getElementsByTagName( 'body' ).item( 0 ).innerHTML.search(/text/i));
}
// ]]>
</script>
<style type="text/css">
</style>
</head>
<body>
<script type="text/javascript" src="dhtml/____________________________________.js"></script>
<div id="divSizer"></div>
blah blah
</body>
</html></code>el metodo search devuelve la posicion del primer caracter de la cadena encontrada o bien -1 si no la ha encontrado. Hay otros metodos como match que igual te irian mejor. Haz pruebas e igual te ayudo esta noche.
cbp
ok, miraré a ver, aunque de momento he probado metiendo el document.body.innerHTML en una variable y después buscando en ella con el indexOf. me sirve para saber si la cadena está o no, pero la salida que me devuelve no es muy usable, la verdad. ahora tendré que buscar el marcador situado lo más cerca posible por arriba e irme a él.
meddle
Haz pruebas e igual te ayudo esta noche.
¿proposiciones indecentes en el foro, maldita sea? ;)
gracias por la ayuda :)
meddle
indexOf hace lo mismo que el search por expresiones regulares. PERO las expresiones regulares son mas rapidas y mas configurables.
Para tener un resultado mas claro (los anteriores devuelven como ya te he dicho la posicion donde primero se encuentra la cadena buscada o un -1 si no se encuentra) deberia saber que quieres que haga <em>exactamente</em> el script. Pero lo normal seria parsear caracter a caracter desde esa posicion hasta la ultima donde aparece la cadena buscada.
cbp
lo que quiero es, dentro de una página estática con un montón de enlaces a otras páginas de interés, colocar en la parte de arriba un buscador que permita encontrar rápidamente la url que se desea.
por ejemplo, tengo x links a páginas de diseño, pero deseo buscar la de yugop. quiero poder teclear "yugop" en el buscador de arriba y que la página se vaya al marcador más cercano. una especia de google en chiquitito, en mi propio documento html.
meddle
ahhh. podrias adaptar el script de autocompletado de dave aunque solo es para IE.
Otra opcion seria usar el match. Si lo haces bien, todas las url deberian estar en una lista. Por lo tanto la busqueda ya es mas especifica. Es mas, si las tienes por categorias (sublistas) podrias añadir un select delante del input para especificar la catagoria. El input tipo barra de google deberia tener un onchange que llama al match sobre la lista, que devuelve un array de cadenas encontradas, que podrian ser escritas en una capa informativa. Y poder seguir escribiendo una direccion en el input para refinar las url encontradas, hasta tener solo una y al dar al enter ir para alla. Por ejemplo. Venga curratelo que yo te ayudo. Pero te lo curras tu, eh? :P
cbp
voy a echar un vistazo al script que me dices, ya que sólo lo necesito para IE (es para una página que me gusta tener como referencia rápida de los sitios que me van molando, una base de datos portátil, vaya). pero si no me convence, me lo curro yo ;)
gracias por la ayuda ofrecida :D
cbp
de momento ya tengo todas las direcciones en un array...
<code>
window.onload = function() {
var j = 0;
var direcciones = new Array();
var direccionesCodigo = document.getElementsByTagName("A");
for (var i=0;i<direccionesCodigo.length;i++) {
if (direccionesCodigo[i].href.indexOf('http://') != -1) {
temp = direccionesCodigo[i].href;
temp = temp.substr(7);
if (temp.charAt(temp.length-1) == '/')
temp = temp.substring(0,temp.length-1);
direcciones[j] = temp;
j++;
}
}
}</code>
sigo avanzando posiciones. más noticias en próximos boletines... :D
meddle
creo que iria mejor el match, pero asi tambien funcionara. yo pondria esos enlaces en una lista, luego solo miraria entre los enlaces de la lista, sera aun mas rapido que mirar todos los enlaces de la pagina, y te puedes ahorrar un if.
cbp
<code>function buscar(que) {
var j = 0;
var direcciones = new Array();
var direccionesCodigo = document.getElementsByTagName("A");
for (var i=0;i<direccionesCodigo.length;i++) {
if ((direccionesCodigo[i].href.indexOf('http://') != -1) && (direccionesCodigo[i].href.indexOf(que) != -1)) {
temp = direccionesCodigo[i].href;
temp = temp.substr(7);
if (temp.charAt(temp.length-1) == '/')
temp = temp.substring(0,temp.length-1);
direcciones[j] = temp;
j++;
}
}
if (direcciones.length != 0) {
var result = '';
document.getElementById('resultados').innerHTML = '';
for (i=0;i<direcciones.length;i++) {
result = result.concat('<a href="http://');
result = result.concat(direcciones[i]);
result = result.concat('">');
result = result.concat(direcciones[i]);
result = result.concat('</a><br>');
}
document.getElementById('resultados').innerHTML = result;
} else {
document.getElementById('resultados').innerHTML = "no se ha encotrado nada";
}
}</code>
uf, bueno, creo que lo tengo. en netscape no va, pero como te dije es algo para uso privado, para poder llevarme fácilmente mi lista con enlaces a cualquier lado en un html (manías que tiene uno...)
primero busco en todos los enlaces con "http://" que haya en la página, miro a ver si tienen la cadena que busco, y si es así, los voy metiendo en un array después de haberles quitado el "http://" del principio y una "/" del final. después, si hay elementos encontrados, voy recorriendo el array y escribiendo las direcciones en el innerHTML de un span inicialmente vacío que he puesto en una div con posicionamiento absoluto. y eso es todo, ahora voy a sacarle punta, jeje :D
orange
Oño! ... no había visto este tema ... interesante el asunto
:D
meddle
ta guapo
yo de ti meteria los enlaces que quieres que sean 'buscables' en una lista y luego el search lo haces solo ahi, sera mas rapido.
cbp
es que la diferencia entre enlaces "buscables" y enlaces "no buscables" es muy pequeña, así que no creo que compense hacerlo así, creo que tardo menos tiempo en recorrerlos todos. ¿os gusta el script? :)
meddle
me gusta. ¿tienes un ejemplo online?
puedes hacerlo SUPER molón que te pasas si añades (al vuelo, no me hagas cutreces añadiendo javascript al formulario) un evento onchange para que a cada letra chequee en todos los enlaces y modifique la capa de informacion. y que por ejemplo chequee solo si la cadena es mayor de tres o 4 letras.
cbp
jeje, la verdad es que sí que quedaría bastante más chulo como tú dices. me has picado un poco, voy a ver qué tal estoy de trabajo y si puedo le meto la modificación de chequear cada vez que teclees una letra, pero no te garantizo nada.
no tengo ningún ejemplo online, como te dije es un html que tengo para uso personal, pero si quieres te mando una muestra para que lo veas funcionando (aviso que todavía hay que pulirlo...)
gracias por los ánimos ;)