2010-10-22 8 views
29

J'ai regardé haut et bas pour une réponse, mais a échoué.remplacer le texte sélectionné dans div divisible

Existe-t-il une solution multi-navigateur pour remplacer le texte sélectionné dans div divisible? Je veux simplement que les utilisateurs mettent en évidence du texte et remplacent le texte surligné par xxxxx.

Répondre

63

Ce qui suit va faire le travail dans tous les principaux navigateurs:

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

Je ne peux pas croire qu'il est aussi simple que cela. Ça marche. Merci! – Judy

+0

Cela ne fonctionne pas pour moi dans Chrome (coller dans INPUT, TEXTAREA ou content-editable). Je suppose que c'est parce que Chrome ne supporte pas plusieurs gammes. Il tombe dans le cas de window.getSelection, mais alors sel.rangeCount est faux, et il n'y a pas de clause "else". –

+2

@DavidJeske: Cela fonctionne vraiment dans Chrome pour les éléments contenteditable, mais pas dans les entrées ou textareas: en non -IE, ce code est spécifique aux sélections au sein du contenu régulier. –