Comment puis-je remplacer le texte sélectionné par un autre texte à l'aide de javascript PURE, dans Firefox?Remplacer le texte sélectionné dans Firefox
Ce que j'utilise pour obtenir la sélection:
var sel = this.getSelection();
var range = sel.getRangeAt(0);
Et aussi cette importante question:
Je veux conserver le format des caractères d'origine (bien sûr la nouvelle chaîne aura le format)
La sélection peut être faite "cross-elements" (par ceci je veux dire que la sélection peut contenir du texte d'un élément comme div ou table et du texte d'un autre élément).
exemple, le document:
<div>
this is a test
</div>
<div>
<b>still a test</b>
</div>
<table style="width:100%;">
<tr>
<td>
another word</td>
<td>
stackoverflow</td>
</tr>
<tr>
<td>
bump</td>
<td>
</td>
</tr>
</table>
l'utilisateur de sélectionner le texte suivant (via une sélection):
son est un test encore anot test
Alors maintenant Je veux remplacer le texte en gardant le format, par exemple remplacer chaque chose par une nouvelle chaîne =
XXX XX X XXXX XXXX XXXX XXXXX X
Document final (remplacer après) sera:
<div>
tXXX XX X XXXX
</div>
<div>
<b>XXXXX X XXXX</b>
</div>
<table style="width:100%;">
<tr>
<td>
XXXXher word</td>
<td>
stackoverflow</td>
</tr>
<tr>
<td>
bump</td>
<td>
</td>
</tr>
</table>
C'est super! pour l'élément parent, je pense que nous pouvons utiliser range.commonAncestorContainer, et pour vérifier les limites range.compareBoundaryPoints. S'il vous plaît voir si elle peut être utilisée pour votre code (je pense que ça peut), de toute façon, même si c'est j'accepterai votre réponse après votre commentaire :) merci – kenny
Je pense que c'est range.comparePoint et pas range.compareBoundaryPoints – kenny
Notez que cela ne fonctionne pas si le texte sélectionné est dans une zone de texte. Si c'est ce que vous voulez voir: http://stackoverflow.com/questions/4714192/insert-text-before-and-after-selection-in-textarea-with-javascript/4714850#4714850 –