P: Cómo hacer un buscador que resalte, en el texto de la página, coincidencias con una cadena de búsqueda?
R:
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>BUSCADOR</title>
<script>
String.prototype.preg_quote=function(){
p= /([:.\+*?[^\]$(){}=!<>|:)])/g;
return this.replace(p,"\\$1");
}
function buscar(cadena){
resetear();
if(!cadena.length)return;
var info3;
cadena=cadena.preg_quote();
var patron=new RegExp(cadena+'(?!\}\})','gim');
var espacio=/^\s$/;
var el=document.getElementsByTagName('html')[0].getElementsByTagName('*');
for(var i=0;i<el.length;i++){
if(el[i].hasChildNodes && el[i].nodeName.toLowerCase()!='title' && el[i].nodeName.toLowerCase()!='script' && el[i].nodeName.toLowerCase()!='meta' && el[i].nodeName.toLowerCase()!='link' && el[i].nodeName.toLowerCase()!='style'){
var tt=el[i].childNodes;
for(var jj in tt){
if(tt[jj].nodeType==3 && !espacio.test(tt[jj].nodeValue)){
patron.lastIndex = 0;
if(info3=patron.exec(tt[jj].nodeValue)){
tt[jj].nodeValue=tt[jj].nodeValue.replace(patron,'{{'+tt[jj].nodeValue.substr(info3['index'],cadena.length)+'}}');
}
}
}
}
}
document.getElementsByTagName('body')[0].innerHTML=document.getElementsByTagName('body')[0].innerHTML.split('}}').join('</span>').split('{{').join('<span style="background-color: #FFFF99">');
}
function resetear(){
original=document.getElementsByTagName('body')[0].innerHTML=original;
}
window.onload=function(){
original=document.getElementsByTagName('body')[0].innerHTML;
}
</script>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<input name="cadena" type="text" id="cadena" />
<input type="button" name="Button" value="buscar" onclick="buscar(cadena.value)" />
</form>
ver Buscador simple
<div>sí, dije buscador <div id="pepe">buscador <span> y
metemos otra vez la palabra buscador} a ver /a qué pasa</span><span>algo
más </span>y
esto fuera del span y dentro de div </div>
</div>
y si ponemos buscador fuera otra vez?
</body>
</html>