Visualizzazione risultati 1 fino 6 di 6

Discussione: [javascript] Problema script evidenziamento testo

  1. #1
    Guest

    Predefinito [javascript] Problema script evidenziamento testo

    Salve a tutti voi, sono qui perchè ho un problema con uno script la cui funzione sarebbe quella di far evidenziare una parola da me scritta in un input.
    Adesso vista la mia incompetenza con tale linguaggio chiedo a voi se possibile riuscire a far funzionare questo script, o tanto più se ne conoscete uno uguale ma funzionante..

    questo è lo script:

    Codice:
    <script type="text/javascript"> var volte = 0; var trovato = false; var base=''; function inizia() { base = opener.document.body.createTextRange(); } function trova() { if (document.MioForm.testo.value == '') { alert('Nulla da cercare!'); return; } if (volte==0) { inizia() } trovato=base.findText(document.MioForm.testo.value) if (trovato) { base.findText(document.MioForm.testo.value); base.select(); base.scrollIntoView(); volte++; base.moveStart("character", 1); base.moveEnd("textedit"); } else { if (volte == '0') alert('"' + document.MioForm.testo.value +'" non è stato trovato in questa pagina.'); else alert('"' + document.MioForm.testo.value+'" è stato trovato '+ volte+' volte in questa pagina.'); volte=0; } } </script>


    questo invece è il form con input:

    codice:

    Codice:

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


    grazie mille anche solo per l'attenzione

  2. #2
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Dunque innanzitutto chiarirei il fatto che questo script funziona SOLO su Internet Explorer, perché per es. provandolo su Mozilla mi dice che createTextRange non è una funzione (perché è prevista solo su IE).

    Poi io direi che funziona, l'ho provato in locale, soltanto che devi mandare a capo il codice, così tutto su una riga come l'hai scritto qui ha problemi di sintassi.

    Aggiungiamo anche il fatto -visto che non hai descritto come lo script avrebbe dovuto funzionare e qual era il suo scopo preciso- che il testo che andrà ad evidenziare è scritto in una pagina... solo che si tratta della pagina che aprirà una nuova finestra (popup) con dentro caricato lo script che hai indicato tu.

    Ripetiamo più chiaramente:
    una pagina A ha del testo scritto nel documento stesso. Poi tramite un link o un bottone si aprirà una nuova pagina B (con il codice che hai indicato) diciamo un popup per la ricerca e la selezione del testo del documento A.
    Scrivendo una parola da ricercare e cliccando sul tasto TROVA verranno selezionate (una a ogni clic del TROVA) le eventuali parole trovate e alla fine verrà indicato quante sono state trovate.

    Dunque funziona, su IE.
    Io sinceramente per non ricreare tutta la situazione di due pagine ho commentato la scritta "opener.document. ..." lasciando solo "document. ..." nella function inizia() per cercare le parole nel documento stesso (per testare) e non nel documento della finestra che ha aperto il popup (identificata con "opener" appunto).
    Se non sai come riformattare e mandare a capo il testo correttamente prova questo:

    Codice HTML:
    <script type="text/javascript"> 
     var volte = 0; 
     var trovato = false; 
     var base=''; 
    
    function inizia() { 
     base = opener.document.body.createTextRange(); 
    } 
    
    function trova() { 
     if (document.MioForm.testo.value == '') { 
      alert('Nulla da cercare!'); 
      return; 
     } 
     if (volte==0) { inizia() } 
     trovato=base.findText(document.MioForm.testo.value  ) 
     if (trovato) { 
      base.findText(document.MioForm.testo.value); 
      base.select(); 
      base.scrollIntoView(); 
      volte++; 
      base.moveStart("character", 1); 
      base.moveEnd("textedit"); 
     } else { 
      if (volte == '0') 
       alert('"' + document.MioForm.testo.value +'" non è stato trovato in questa pagina.'); 
      else 
       alert('"' + document.MioForm.testo.value+'" è stato trovato '+ volte+' volte in questa pagina.');
      volte=0; 
     } 
    } 
    </script>
    
    <form name="MioForm"> <input type="text" name="testo"> <input type="button" value="TROVA" onClick="trova()"> </form>
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  3. #3
    Guest

    Predefinito

    ti ringrazio per la dettagliata risposta e dei consigli quali terrò ben a mente, mi scoccia abusare a questo punto della tua cordialità ma mi chiedevo se per caso conoscessi una script analogo compatibile per lo meno anche con firefox, perchè per gli scopi prefissi è richiesto.

    Nel caso non fosse ben chiaro ciò che desidero, io vorrei semplicemente uno javascript che mi evidenzi una parola nella mia pagina web inserendo tale parola in un input.

    grazie veramente tanto per la disponibilità, non ho ricevuto risposte altrove se non qui ^_^.. grazie.

  4. #4
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Mi sembra che questo possa andar bene:
    http://www.dynamicdrive.com/dynamicindex11/findpage.htm

    Se non fosse chiaro, così com'è configurato inizialmente cerca nella pagina stessa (prova la demo direttamente in quella pagina linkata) nel tuo caso se vuoi cercare da un popup (come detto nel post precedente) penso basti cambiare le ultime righe del codice originale:
    Codice HTML:
    //  If you want to search another frame, change from "self" to
    //  the name of the target frame:
    //  e.g., var frametosearch = 'main'
    
    //var frametosearch = 'main';
    var frametosearch = self;
    in:
    Codice HTML:
    //  If you want to search another frame, change from "self" to
    //  the name of the target frame:
    //  e.g., var frametosearch = 'main'
    
    //var frametosearch = 'main';
    //var frametosearch = self;
    var frametosearch = opener;
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  5. #5
    Guest

    Predefinito

    ma grazie infinite questo funziona alla perfezione :) e rigrazie anche per la spiegazione.. vorrei terminare qui ma ti chiedo un ultimissima cosa, senza stare a farti perdere tempo o cervellarti, sarebbe possibile anche avere selezioni multiple per le stesse parole, ovvero se c'è la parola ciao lui seleziona solo la prima , se sarebbe possibile selezionarle tutte sarebbe perfetto...ti ringrazio comunque di tutto quanto ...grazie :)

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Penso proprio (al 90% di convinzione) che QUEL tipo di selezione, ovvero proprio quella "utente" (usa la stessa selezione di quando trascini sul testo col mouse), deve essere necessariamente UNICA per singola window. Può essere multipla solo se hai frame diversi ma comunque di selezione "attiva" ce n'è sempre una sola.

    Le selezioni che vedi in alcuni siti -che non usano la selezione attiva utente- vengono effettuate proprio alla restituzione della pagina da parte del server (la pagina html ha cioè proprio dei tag span colorati attorno a certe parole) ma farlo dinamicamente tramite dhtml la vedo molto dura e faticosa.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •