2010-12-02 18 views
5

J'ai un div éditable et j'utilise un bouton pour insérer une image dans la div. En ce moment, je ne fais que document.getElementById ('elementid'). InnerHTML. + =; afin d'obtenir l'image ajoutée à la fin de la div. Je voudrais entrer dans l'image où se trouve le curseur. Comment ferais-je cela?Editable Div Caret Position

Merci

Répondre

3

Pour insérer un élément au caret n'est pas trop dur. La fonction suivante insère un nœud au caret (ou à la fin de la sélection, si le contenu est sélectionné) dans tous les principaux navigateurs:

function insertNodeAfterSelection(node) { 
    var sel, range, html; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.getRangeAt && sel.rangeCount) { 
      range = sel.getRangeAt(0); 
      range.collapse(false); 
      range.insertNode(node); 
     } 
    } else if (document.selection && document.selection.createRange) { 
     range = document.selection.createRange(); 
     range.collapse(false); 
     html = (node.nodeType == 3) ? node.data : node.outerHTML; 
     range.pasteHTML(html); 
    } 
} 
+0

se demandait comment je pouvais mettre cela à la fin de l'e zone d'abandon plutôt qu'un point spécifique – kqlambert

+0

@kricket: http://stackoverflow.com/a/4238971/96100 –

0
+0

Je comprends que vous remplacez simplement un caractère inséré/ensemble de caractères, mais comment pourrais-je faire pour insérer le personnage à la position du caret. Devrait-il être une entrée au clavier simulé ou d'une autre manière? – intl

+1

Wow ... Je suis très honteux de dire que je pensais que vous vouliez dire un signe, comme dans littéralement un personnage de caret dans le texte ... Je m'excuse pour mon malentendu :( –

2

Je déteste paraître négatif, mais cela est tellement dur qu'il est ridicule. Vous devez traiter avec IE et d'autres, et les implémentations sont très différentes. Mais quand il devient trop dur, c'est que si vous cliquez sur un bouton pour insérer l'image, vous perdez le focus et la position du curseur, donc vous devez vous souvenir de la position avec une capacité de bookmarking onblur (encore, IE différent). Le point de focalisation n'est pas vraiment un problème si votre contenu editable est dans un iframe et maintient son propre focus. (Note: pas dissing IE ici, je préfère réellement leur implémentation à la norme DREK W3C.)

Vous pouvez regarder quelques éditeurs de texte open source pour des indices et des conseils. Mais vous trouverez une énorme quantité de code pour gérer ces tâches simples.

+0

Il y a des difficultés que vous mentionnez, mais ils ne sont pas insurmontable.La bibliothèque My Rangy (http://code.google.com/p/rangy) peut aider avec la plupart d'entre eux: elle fournit une API unique et des méthodes pour enregistrer et restaurer une sélection.En général, je ne suis pas d'accord avec vous sur la sélection d'IE/TextRange étant meilleur que les standards DOM: 'Range 'est massivement supérieur à' TextRange' de la plupart des manières sauf pour déplacer les limites pour englober les mots et se déplacer vers le texte adjacent dans le document Il n'y a pas de standard pour les objets de sélection (WHATWG fonctionne) mais la sélection d'IE n'a rien sur celles des autres navigateurs –

+0

... et en fait, maintenant je lis la question un peu plus près, cette tâche n'est pas si difficile –