J'ai une page avec beaucoup de zones de texte. Quand quelqu'un clique sur un lien, je veux qu'un mot ou deux soient insérés là où se trouve le curseur, ou ajoutés à la zone de texte qui a le focus.
Par exemple, si le curseur / focus est sur une zone de texte disant «pomme» et qu'il clique sur un lien disant «[email]», alors je veux que la zone de texte dise «apple [email protected]».
Comment puis-je faire ceci? Est-ce même possible, puisque que se passe-t-il si le focus est sur un élément radio / dropdown / non textbox? Peut-on se souvenir du dernier axé sur la zone de texte?
javascript
jquery
Cliquez sur Upvote
la source
la source
Réponses:
Utilisez ceci, à partir d' ici :
la source
areaId
?function deleteTxt() { var ele = document.getElementById('yourTextarea'); var text = ele.value; text = text.slice(0, ele.selectionStart) + text.slice(ele.selectionEnd); ele.value = text; return text; }
Peut-être qu'une version plus courte serait plus facile à comprendre?
J'ai écrit ceci en réponse à Comment ajouter un texte à une zone de texte à partir de la position actuelle du pointeur avec jquery?
la source
document.getElementById("txt").selectionStart = caretPos + txtToAdd.length
.La réponse approuvée de George Claghorn a très bien fonctionné pour insérer simplement du texte à la position du curseur. Si l'utilisateur a cependant sélectionné du texte et que vous souhaitez que ce texte soit remplacé (l'expérience par défaut avec la plupart du texte), vous devez apporter une petite modification lors de la définition de la variable «retour».
De plus, si vous n'avez pas besoin de prendre en charge les anciennes versions d'IE, les versions modernes prennent en charge textarea.selectionStart, vous pouvez donc supprimer toute la détection du navigateur et le code spécifique à IE.
Voici une version simplifiée qui fonctionne au moins pour Chrome et IE11 et gère le remplacement du texte sélectionné.
la source
maxlength
, donc la valeur résultante après l'insertion pourrait être plus longue que le maximum.Le code ci-dessus ne fonctionnait pas pour moi dans IE. Voici un code basé sur cette réponse .
J'ai sorti le
getElementById
pour pouvoir référencer l'élément d'une manière différente.EDIT: Ajout d'un extrait de code en cours d'exécution, jQuery n'est pas utilisé .
la source
element.focus()
est une méthode JavaScript légitime sur DOMElements: w3schools.com/jsref/met_html_focus.aspen utilisant la réponse @quick_sliv:
la source
Comment insérer du texte à la position actuelle du curseur d'une zone de texte via JQuery et JavaScript
Processus
Ici, j'ai 2 TextBoxes et un Button. Je dois cliquer sur une certaine position dans une zone de texte, puis cliquer sur le bouton pour coller le texte de l'autre zone de texte à la position de la zone de texte précédente.
Le problème principal ici est d'obtenir la position actuelle du curseur où nous allons coller le texte.
la source
L'ajout de texte à la position actuelle du curseur comporte deux étapes:
Démo: https://codepen.io/anon/pen/qZXmgN
Testé dans Chrome 48, Firefox 45, IE 11 et Edge 25
JS:
HTML:
la source
Je pense que vous pouvez utiliser le JavaScript suivant pour suivre la dernière zone de texte ciblée:
Usage:
Une solution précédente (props to gclaghorn) utilise textarea et calcule également la position du curseur, donc cela peut être mieux pour ce que vous voulez. D'un autre côté, celui-ci serait plus léger, si c'est ce que vous recherchez.
la source
La réponse acceptée n'a pas fonctionné pour moi sur Internet Explorer 9. Je l'ai vérifiée et la détection du navigateur ne fonctionnait pas correctement, elle a détecté ff (firefox) lorsque j'étais à Internet Explorer.
Je viens de faire ce changement:
Au lieu de:
Le code résultant est celui-ci:
la source
Ce plugin jQuery vous offre un moyen prédéfini de manipulation de sélection / caret.
la source
vous ne pouvez mettre au point que la zone de texte requise et y insérer le texte. il n'y a aucun moyen de savoir où se concentre AFAIK (peut-être interagissant sur tous les nœuds DOM?).
Vérifiez ce stackoverflow - il a une solution pour vous: Comment savoir quel élément DOM a le focus?
la source
Contenu modifiable, HTML ou tout autre élément DOM Sélections
Si vous essayez d'insérer au point d'insertion sur a
<div contenteditable="true">
, cela devient beaucoup plus difficile, surtout s'il y a des enfants dans le conteneur modifiable.J'ai eu beaucoup de chance en utilisant la bibliothèque Rangy :
Il a une tonne de fonctionnalités intéressantes telles que:
La démo en ligne ne fonctionnait pas la dernière fois que j'ai vérifiée, mais le dépôt a des démos fonctionnelles. Pour commencer, téléchargez simplement le Repo depuis Git ou NPM, puis ouvrez ./rangy/demos/index.html
Cela facilite le travail avec la position caret et la sélection de texte!
la source
La réponse à cette question a été publiée il y a si longtemps et je suis tombée dessus via une recherche Google. HTML5 fournit l' API HTMLInputElement qui inclut la méthode setRangeText () , qui remplace une plage de texte dans un élément
<input>
ou<textarea>
par une nouvelle chaîne:Ce qui précède remplacerait la sélection effectuée à l'intérieur
element
parabc
. Vous pouvez également spécifier la partie de la valeur d'entrée à remplacer:Ce qui précède remplacerait les 4e à 6e caractères de la valeur d'entrée par
abc
. Vous pouvez également spécifier comment la sélection doit être définie après le remplacement du texte en fournissant l'une des chaînes suivantes comme 4ème paramètre:'preserve'
tente de conserver la sélection. C'est la valeur par défaut.'select'
sélectionne le texte nouvellement inséré.'start'
déplace la sélection juste avant le texte inséré.'end'
déplace la sélection juste après le texte inséré.Compatibilité du navigateur
La page MDN pour setRangeText ne fournit pas de données de compatibilité du navigateur, mais je suppose que ce serait la même chose que HTMLInputElement.setSelectionRange () , qui est essentiellement tous les navigateurs modernes, IE 9 et supérieur, Edge 12 et supérieur.
la source