Est-il possible d'obtenir le texte en surbrillance dans un paragraphe d'un site Web, par exemple en utilisant jQuery?
Est-il possible d'obtenir le texte en surbrillance dans un paragraphe d'un site Web, par exemple en utilisant jQuery?
Réponses:
Obtenir le texte que l'utilisateur a sélectionné est relativement simple. Il n'y a aucun avantage à gagner en impliquant jQuery puisque vous n'avez besoin de rien d'autre que les objets window
et document
.
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
Si vous êtes intéressé par une implémentation qui traitera également des sélections <textarea>
et des <input>
éléments textuels , vous pouvez utiliser ce qui suit. Comme c'est maintenant 2016, j'omet le code requis pour la prise en charge IE <= 8, mais j'ai publié des trucs pour cela à de nombreux endroits sur SO.
function getSelectionText() {
var text = "";
var activeEl = document.activeElement;
var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
if (
(activeElTagName == "textarea") || (activeElTagName == "input" &&
/^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
(typeof activeEl.selectionStart == "number")
) {
text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
} else if (window.getSelection) {
text = window.getSelection().toString();
}
return text;
}
document.onmouseup = document.onkeyup = document.onselectionchange = function() {
document.getElementById("sel").value = getSelectionText();
};
Selection:
<br>
<textarea id="sel" rows="3" cols="50"></textarea>
<p>Please select some text.</p>
<input value="Some text in a text input">
<br>
<input type="search" value="Some text in a search input">
<br>
<input type="tel" value="4872349749823">
<br>
<textarea>Some text in a textarea</textarea>
window.getSelection()
). La document.selection.type
vérification teste que la sélection est une sélection de texte plutôt qu'une sélection de contrôle. Dans IE, une sélection de contrôle est une sélection à l'intérieur d'un élément modifiable contenant un ou plusieurs éléments (tels que des images et des contrôles de formulaire) avec des contours et des poignées de redimensionnement. Si vous faites appel .createRange()
à une telle sélection, vous obtenez un ControlRange
plutôt qu'un TextRange
, et les ControlRange
s n'ont aucune text
propriété.
selectionStart
ou selectionEnd
dans un <input>
type d'élément (tel que "nombre") qui ne fonctionne pas supportez-le (voir jsfiddle.net/6zoposby/2 , par exemple). J'ai laissé la vérification de l'existence de selectionStart
afin que le code ne se casse pas dans IE <= 8. J'avoue que la vérification activeElement
est probablement exagérée maintenant. J'utilise slice
parce qu'il est plus puissant (bien que ce ne soit pas utile ici) et légèrement plus court à taper que substring
.
Obtenez le texte en surbrillance de cette façon:
window.getSelection().toString()
et bien sûr un traitement spécial pour:
document.selection.createRange().htmlText
document.selection
support a été supprimé dans IE10 et remplacé par window.getSelection
». Source: connect.microsoft.com/IE/feedback/details/795325/…
Cette solution fonctionne si vous utilisez Chrome (ne peut pas vérifier d'autres navigateurs) et si le texte se trouve dans le même élément DOM:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Utilisez window.getSelection().toString()
.
Vous pouvez en savoir plus sur developer.mozilla.org