2010-08-23 12 views
5

Sto tentando di evidenziare una parte di testo in una "Textarea". ho una lunga serie in quel TextArea:Evidenziazione di un pezzo di stringa in una TextArea

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident 

E ho una funzione che può estrarre la prima occorrenza stringa che è tra le e VAR "BEGIN" "End". Per esempio:

extract("ipsum", "consectetur") // This will give: "dolor sit amet," 

Ma, quello che voglio è quello di selezionare il risultato della funzione in modo che la stringa risultante "dolor sit amet," verrà evidenziato.

È possibile? Come posso fare questo?

Grazie,

Saluti.

+0

Con l'evidenziazione, suppongo che intendi selezionare? –

risposta

2

Ricordo di aver visto questo qualche tempo fa ... http://www.din.or.jp/~hagi3/JavaScript/JSTips/Mozilla/Samples/NSHTMLTextAreaElement.htm

La sua piuttosto complicato e ho potuto mai del tutto essere disturbati per ottenere la mia testa intorno ad esso. Non so se questo è quello che ti serve, o se puoi usarlo del tutto. :)

+0

nice one Thomas. –

+0

Sembra carino, ma funziona con IE 6/7/8? (Impossibile verificare questo al momento.) –

+1

No, non tenta nemmeno di supportare IE. –

2

Non è possibile evidenziare parti diverse del testo in un'area di testo. È possibile selezionare una parte ma non più parti e selezionare non evidenziare. Puoi prendere il contenuto della tua textarea e, ad esempio, un <div> e metterlo in evidenza con <span class="highlight">...</span>

+0

L'OP non chiedeva di evidenziare le prime due stringhe. Voleva evidenziare il testo tra loro. – MarkHu

4

Ecco un codice che selezionerà un intervallo di testo in un'area di testo in tutti i principali browser, incluso IE 6+ :

function offsetToRangeCharacterMove(el, offset) { 
    return offset - (el.value.slice(0, offset).split("\r\n").length - 1); 
} 

function setSelection(el, start, end) { 
    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { 
     el.selectionStart = start; 
     el.selectionEnd = end; 
    } else if (typeof el.createTextRange != "undefined") { 
     var range = el.createTextRange(); 
     var startCharMove = offsetToRangeCharacterMove(el, start); 
     range.collapse(true); 
     if (start == end) { 
      range.move("character", startCharMove); 
     } else { 
      range.moveEnd("character", offsetToRangeCharacterMove(el, end)); 
      range.moveStart("character", startCharMove); 
     } 
     range.select(); 
    } 
} 

var textarea = document.getElementById("your_textarea"); 
var val = textarea.value; 
var start = val.indexOf("ipsum") + 5, end = val.indexOf("consectetur"); 
setSelection(textarea, start, end); 
+0

Tutto buono tranne il kludge '+ 5' che è presumibilmente la lunghezza della prima stringa. Questo è molto simile ad un algoritmo in una delle risposte a http://stackoverflow.com/questions/1981088/set-textarea-selection-in-internet-explorer – MarkHu

+0

@MarkHu: Sì, il '+ 5' è esattamente quello , fatto per brevità. Sembra un po 'strano usare "ipsum" .length' invece. La somiglianza con l'altra risposta penso possa essere un caso di quella risposta presa in prestito da uno dei miei ([questo qui] (http://stackoverflow.com/questions/3622818/ies-document-selection-createrange-doesnt-include- leading-or-trailing-blank-li), ad esempio). –

Problemi correlati