Newsgroup: it.comp.lang.javascript
Titolo: ricerca parola o testo interno alla pagina

Salve a tutti.
Ho un problema con la realizzazione di un'idea.
Vorrei far si che mettendo una parola in una input text, venisse cercata
all'interno del documento stesso e le parole trovate venissero evidenziate
(selezionate insomma).
E possibile? per ora sono solamente riuscito a fare un po' l'inverso, ovvero
selezionando una parola in un documento riesco a buttarla in una input text.
Grazie dei suggerimenti,
Stefano

 selezionando una parola in un documento riesco a buttarla in una input
text.
Vado a memoria ed è abbastanza semplice in NS4 e IE4+.
Non ricordo il DOM di NS6, ma verrà in aiuto il buon ZER0...
Dovresti scrivere qualcosa del genere:
<script>
 function findWord(frm){
  var strSearch=frm.strSearch.value;
  if(strSearch.length==0){return false;}
  if(document.layers){
   window.find(strSearch);
  } else if(document.all){
   var objTextRange = document.body.createTextRange();
   if(objTextRange.findText(strSearch)){objTextRange.select();}
  }
  return false;
 }
 </script>
<form action="#" name="frmTest" onsubmit="return findWord(this);">
<input type="text" name="strSearch" size="20" maxlength="255">
<input type="submit" name="cmdSearch" value="Search">
</form>
Con i parametri appropriati la ricerca può essere fatta anche case sensitive
e nella direzione che vuoi

su NS4 non puoi, puoi solo su IE e NS5++ e Mozilla:
usi document.geteElementById('nome').innerHTML
sotto il tag body, metti tutto dentro un layer position relative:
<body>
<div id='name' style='position:relative'>
......
</div>
</body>
nello script
var A=document.geteElementById('nome').innerHTML ti legge tutto l'input
Poi cerchi con le espressioni regolari (in realtà questo passaggio è
opzionale):
if(/parola/.test(A)){
return true
}
le barre /.../ sono deputate a contentre le espressioni regolari, che
devi sapere usare per una cosina del genere!!!
se ritorna true,
A.replace(/parola/,"<strong><font color='#ff0000'>parola</font>")
Poi:
document.write("<html><body><div id='name'
style='position:relative'>"+A+"</div></body></html>")
Probabile che sia troppo sinteitco così e va ben testato, ma la strada è
senz'altro questa (ma scordati di poter leggere il contenuto di una
pagina html con NS4)
Se non sai cosa sono le espressioni regolari e getElementById, ci
vorrebbe un trattato, non per cattiveria...! se sai cosa sono puoi
provare a implementare.
ciao!
Alberto Vallini
http://www.unitedscripters.com/
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 document.write("<html><body><div id='name'
style='position:relative'>"+A+"</div></body></html>")
Perché riscrivere tutto il document e non solo l'innerHTML del div in
questione?
Saludos


E' esatto. mi interessava infatti selezionare la parola e non riscriverla in
grassetto. Per riscriverla in qualche modo differente l'avrei fatto in ASP o
in XML che e' molto piu' immediato.
Siccome ho fatto un piccolo motore di ricerca interno al sito che mi
restituisce ricorsivamente i link a tutte le sottopagine che contengono una
determinata parola, mi sarebbe piaciuto appunto che, cliccando sul link
della pagina, mi si aprisse la pagina (passando la parola cercata come
parametro) e mi si selezionassero tutte le occorrenze della parola.
Ora tento di risolvere il problema con il primo metodo che mi avete dato.
Grazie ancora,
Stefano