EVIDENZIARE TUTTE LE OCCORRENZE DI UNA STRINGA IN UN DOCUMENTO

 

Questo trucco funziona solo con MSIE. Dopo aver aperta una finestra di dialogo si immette una stringa nella casella di testo apposita: tutte le occorrenze della stringa, se presente nella pagina, appaiono evidenziate. Al termine viene visualizzato un messaggio con il numero di occorrenze trovato: tale numero può, naturalmente, essere anche nullo.
Se si effettua una nuova ricerca l'evidenziatore cambia colore. Abbiamo scelto cinque colori diversi che eventualmente si ripetono.

Il risultato dello script può essere provato cliccando sul bottone

COME OTTENERE IL RISULTATO

PASSO UNO

Questa parte è simile a quella che abbiamo già visto per cercare una stringa in un documento. Preparare il seguente codice javascript, a inserire fra i tags <HEAD> ed </HEAD> :

<script language=javascript>

Si introduce codice javascript

function evidenzia () {

Dichiarazione della funzione di nome evidenzia ()

if (document.all) {

Se il browser è Internet Explorer

finestra= window.open('ricerca1.htm','nome','width=400,height=200')

Viene aperto in una finestra pop up di dimensioni 400 × 200 il file di nome "ricerca1.htm"

finestra= window.focus

La finestra viene aperta in primo piano: se ci sono altre finestre questa viene aperta sopra le altre.

finestra.document.close()

Si comunica al browser che le istruzioni relative all'apertura della finestra sono terminate

}

Parentesi di chiusura della selezione binaria (if)

else window.alert('Il tuo browser non supporta questo metodo')

Qualora il browser dell'utente non sia MSIE, si riceve il messaggio: "Il tuo browser non supporta questo metodo"

}

Parentesi di chiusura della funzione evidenzia()

</script>

Fine script

PASSO DUE

Inserire il seguente codice per il bottone , fra i tags <BODY> e </BODY> :

<input type=button name=bo value="Cerca ed evidenzia" OnClick="javascript:evidenzia()">

PASSO TRE

Preparare il file per trovare le parole e salvarlo con il nome ricerca1.htm.
Fra i tags <HEAD> ed </HEAD> di questo file inserire il seguente codice:

<script language=javascript>

Si introduce codice javascript

var volte = 0;

Si inizializza la variabile di nome volte che serve per memorizzare il numero di occorrenze della parola cercata nel documento.

var conta = 0;

Si inizializza la variabile di nome conta che serve per memorizzare il numero di ricerche diverse effettuate e quindi cambiare il colore dell'evidenziatore della stringa.

var trovato = false;

Si inizializza la variabile booleana di nome trovato che diventerà vera qualora la parola cercata si trovi nel documento.

var colore= new Array('FF0000', 'FFFF00', '00FFFF','00FF00','FF00FF')

Si introduce la variabile strutturata colore dove, ordinatamente,sono memorizzati i codici esadecimali dei colori che intendiamo usare per evidenziare le parole. APPROFONDIMENTO SUI COLORI

var base='';

Si inizializza la variabile di nome base che serve per memorizzare l'intervallo di testo per la ricerca.

function inizia() {
conta=conta+1
base = opener.document.body.createTextRange();
}

Si dichiara la funzione inizia() che crea un intervallo di testo (TextRange) coincidente con tutto il contenuto testuale del corpo del documento dal quale proveniamo (opener) e lo memorizza nella variabile base. La variabile conta, che serve per contare il numero di ricerche effettuato, viene incrementata di 1.

function trova() {

Si introduce la funzione trova

if (document.MioForm.testo.value == '') {
alert('Nulla da cercare!');
return;
}

Se non è stata inserita alcuna stringa della casella di testo del form viene generato il messaggio: "Nulla da cercare!"

if (volte==0) {
inizia()
}

Se volte=0, cioè se la funzione trova è stata attivata per la prima volta, si chiama la funzione inizia

do {

Ciclo a controllo in coda: le azioni contenute nella graffa vengono ripetute finché è vera la condizione posta dopo la parola riservata while APPROFONDIMENTO

trovato=base.findText(document.MioForm.testo.value)

Il metodo find.Text permette di ricercare la stringa chiusa in parentesi. Se questa stringa viene trovata la variabile trovato diventa vera, altrimenti resta falsa come la avevamo posta prima.
Nel momento in cui si usa il metodo find.Text, l'intervallo di testo, che inizialmente avevamo esteso a tutto il documento, automaticamente si restringe alla sola stringa cercata.

if (trovato) {

Se la variabile trovato è vera

base.findText(document.MioForm.testo.value);

Come spiegato prima, l'intervallo di testo viene ora ristretto alla stringa cercata.

resto=conta % 5

Nella variabile resto viene memorizzato il resto della divisione per 5: è questo il numero dei colori che abbiamo previsto. I resti della divisione per 5 variano da 0 a 4. Ricordiamo che il primo elemento di un array in javascript è il numero zero, il secondo il numero uno, e così via.

base.pasteHTML('<font style="background-color: #' + colore[resto]+'">'+document.MioForm.testo.value +'</font>');

Incolla il codice HTML in parentesi nell'intervallo di testo (textRange) di nome base, cioè, in pratica, al posto della stringa cercata. Tale stringa (document.MioForm.testo.value) viene di fatto scritta di nuovo, ma con uno stile diverso. Abbiamo previsto che questa risulti evidenziata, e che il colore di sfondo sia in base al numero di ricerca effettuato. Ad esempio, nel caso della prima ricerca:

  • conta=1
  • resto=1
  • colore[resto]='FFFF00' cioè giallo
Il colore (background-color:) che evidenzia la stringa cercata perciò risulta: #FFFF00
volte++;

la variabile volte viene incrementata di 1

base.moveStart("character", 1);
base.moveEnd("textedit");

L'inizio dell'intervallo di testo viene spostato avanti di un carattere, mentre il termine coincide con il termine dell'intervallo precedente. In questo modo il nuovo intervallo di ricerca varierà fra il carattere subito dopo la stringa trovata e la fine del documento.

}

Parentesi di chiusura della selezione binaria

}

Parentesi di chiusura delle istruzioni da ripetere in un singolo ciclo

while (trovato)

Condizione da verificare per ripetere il ciclo: esso verrà ripetuto fino a quando la variabile trovato sia vera, cioè fino a quando ci sarà stata un'occorrenza della stringa cercata nell'intervallo di testo.

if (volte == '0'){
alert('"' + document.MioForm.testo.value +'" non è stato trovato in questa pagina.');
conta = conta-1
}

Se volte è ancora uguale a zero, si riceve l'avviso che la parola cercata non è stata trovata; la variabile conta viene decrementata perché, ai fini del colore per evidenziare le stringhe, è come se non fosse stata fatta alcuna ricerca.

else{
alert('"' + document.MioForm.testo.value+'" è stato trovato '+ volte+' volte in questa pagina.');

Questo else riguarda l'evento: "volte non è zero e trovato è falso". In questo caso viene visualizzato il messaggio che contiene il numero di volte in cui la stringa è stata trovata.

volte=0;

Si pone nuovamente volte uguale a zero per una nuova ricerca

}
}

Chiusura else; chiusura function

</script>

Fine script.

PASSO QUATTRO

Sempre nel file ricerca1.htm inserire il seguente codice, fra i tags <BODY> e </BODY> :

<form name="MioForm">
<input type="text" name="testo">
<input type="button" value="EVIDENZIA" onClick="trova()">
</form>

Tale codice visualizza nel corpo del documento della pagina ricerca1.htm il form con la casella di testo per inserire la stringa da cercare ed il bottone per avviare la ricerca stessa.


INDICEINDIETRO

©2005 www.webfract.it