2010-10-22 30 views
29

Szukałem wysokiego i niskiego na odpowiedź, ale nie powiodło się.zastąpić wybrany tekst w contenteditable div

Czy istnieje rozwiązanie oparte na różnych przeglądarkach, które zastępuje wybrany tekst w div? Po prostu chcę, aby użytkownicy podświetlili jakiś tekst i zamienili podświetlony tekst na xxxxx.

Odpowiedz

63

Poniższa wykona pracę we wszystkich głównych przeglądarek:

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

Nie mogę uwierzyć, że to takie proste. To działa. Dzięki! – Judy

+0

To nie działa dla mnie w Chrome (wklejanie do INPUT, TEXTAREA lub treści do edycji). Podejrzewam, że to dlatego, że Chrome nie obsługuje wielu zakresów. Wpada w przypadek window.getSelection, ale sel.rangeCount jest fałszywy i nie ma klauzuli "else". –

+2

@DavidJeske: To zdecydowanie działa w Chrome dla elementów contenteditable, ale nie na wejściach ani w tekstach: w non Przeglądarki, ten kod jest specyficzny dla selekcji w ramach zwykłej treści. –

Powiązane problemy