Insérer du texte sur le lieu actuel du curseur dans le navigateur

J'ai une fenêtre modale qui aide à formater du texte. J'ai plusieurs zones de texte sur la fenêtre. Le mode ne doit pas être attaché à une zone de texte spécifique, alors, lorsque j'appuie sur une icône dans la fenêtre modal, je dois insérer une chaîne / émoticône, etc. où le curseur est actuellement. Ma question: Comment savoir dans quel élément (textarea / input / whatever) le curseur se trouve-t-il actuellement?

La dernière version de tous les navigateurs prend en charge document.activeElement. Cela vous dira quel domaine a actuellement la mise au point dans cette fenêtre (c'est là que se trouve le curseur). Ensuite, vous devrez savoir comment insérer du texte à la position actuelle du curseur. La fonction suivante fait exactement cela.

// Author: http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript // Modified so it's safe across browser windows function insertAtCursor(myField, myValue) { var doc = myField.ownerDocument; //IE support if (doc.selection) { myField.focus(); sel = doc.selection.createRange(); sel.text = myValue; } //FF, hopefully others else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); } // fallback to appending it to the field else { myField.value += myValue; } } 

Par conséquent, à partir de votre popup, votre gestionnaire de boutons devrait appeler la méthode suivante

 // Pardon my contrived function name function insertTextIntoFocusedTextFieldInOpener(text) { var field = window.opener.document.activeElement; if (field.tagName == "TEXTAREA" || (field.tagName == "INPUT" && field.type == "text" ) { insertAtCursor(field, text); } } 

Il ne semble pas y avoir de propriété comme isfocused que vous pouvez vérifier afin de déterminer si un champ de texte particulier a mis l'accent. Toutefois, vous pouvez créer un gestionnaire d'événements pour l'événement onFocus pour chacune des zones de texte, et lui faire enregistrer l'ID de la zone de texte nouvellement focalisée dans une variable afin que vous puissiez la vérifier ultérieurement.

De plus, vous pouvez vous intéresser à ce tutoriel , qui vous indique comment insérer du texte à la position actuelle du curseur dans un champ donné (une fois que vous avez déterminé quel champ est concentré, par exemple en utilisant la méthode ci-dessus).