Je possède ce contentedittable divcomment obtenir la position de caret d'un contenteditable div qui contient des images
<div contenteditable="true" id="text">minubyv<img src="images/smiley/Emoji Smiley-01.png" class="emojiText" />iubyvt</div>
Voici une description de l'image de la sortie de code
donc je veux obtenir le caret position de la div et laisse supposer que le curseur est après le dernier caractère. Et voici mon code pour obtenir la position de caret
function getCaretPosition(editableDiv) {
var caretPos = 0,
sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
if (range.commonAncestorContainer.parentNode == editableDiv) {
caretPos = range.endOffset;
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
if (range.parentElement() == editableDiv) {
var tempEl = document.createElement("span");
editableDiv.insertBefore(tempEl, editableDiv.firstChild);
var tempRange = range.duplicate();
tempRange.moveToElementText(tempEl);
tempRange.setEndPoint("EndToEnd", range);
caretPos = tempRange.text.length;
}
}
return caretPos;
}
var update = function() {
console.log(getCaretPosition(this));
};
$('#text').on("mousedown mouseup keydown keyup", update);
Mais le problème est qu'il retourne 6
au lieu de 14
. La position du curseur revient à 0
après l'image. S'il vous plaît, est-ce que je peux obtenir la position du curseur 14
dans ce cas.
EDIT
Je veux aussi insérer un élément à partir de la position de caret. c'est donc ma fonction de le faire
selectStart = 0;
var update = function() {
selectStart = getCaretPosition(this);
};
function insertEmoji(svg){
input = $('div#text').html();
beforeCursor = input.substring(0, selectStart);
afterCursor = input.substring(selectStart, input.length);
emoji = '<img src="images/smiley/'+svg+'.png" class="emojiText" />';
$('div#text').html(beforeCursor+emoji+afterCursor);
}
Votre code est cool, mais j'ai besoin de détecter tous les fichiers html Le contenu de la div ne contient pas le texte, car je vais insérer quelques caractères dans la div à la position du curseur. Regardez ma question éditer. –
@doggiebrezy Je l'ai fait fonctionner comme vous le voulez. Voir ma réponse mise à jour. Je l'ai testé sur Chrome et Firefox. Cela ne fonctionne pas sur IE cependant. –
merci pour votre modification, mais s'il vous plaît aidez-moi avec une dernière chose. Maintenant, je veux insérer du texte ou une image à la position du curseur et ainsi je diviser le div.html mais le problème est que supposant que la position du curseur est 11, le texte inséré ne compte pas cette image en tant qu'un img entier.html là en déplaçant le point où il est censé être inséré, s'il vous plaît pouvez-vous m'aider à compter combien de chaîne dans le div.html y compris l'élément img –