2010-10-22 21 views
29

Ho cercato in alto e in basso per una risposta ma non è riuscito.sostituisce il testo selezionato in div contenteditable

Esiste una soluzione cross-browser per sostituire il testo selezionato in div contenteditable? Voglio semplicemente che gli utenti mettano in evidenza del testo e sostituiscano il testo evidenziato in xxxxx.

risposta

63

Di seguito farà il lavoro in tutti i principali browser:

function replaceSelectedText(replacementText) { 
    var sel, range; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.deleteContents(); 
      range.insertNode(document.createTextNode(replacementText)); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.text = replacementText; 
    } 
} 
+4

Non posso credere che sia così semplice. Funziona. Grazie! – Judy

+0

Questo non funziona per me in Chrome (incolla su INPUT, TEXTAREA o modificabile dal contenuto). Sospetto che sia perché Chrome non supporta intervalli multipli. Sta cadendo nel caso window.getSelection, ma sel.rangeCount è falso, e non c'è alcuna clausola "else" .. –

+2

@DavidJeske: Questo sicuramente funziona in Chrome per elementi contenteditable, ma non in input o textareas: in non -I browser di Google, questo codice è specifico per le selezioni all'interno di contenuti regolari. –

Problemi correlati