remplacer innerHTML dans div divisible
j'ai besoin pour mettre en œuvre mettre en évidence pour les nombres( dans le futur, im ajouter des règles plus complexes ) dans le contenteditable div. Le problème, c'est Quand im insérer le nouveau contenu javascript remplacer, DOM changements et contenteditable div perdu le focus. Ce dont j'ai besoin est de maintenir l'accent sur les div avec le curseur sur la position actuelle, de sorte que les utilisateurs puissent saisir sans aucun problème et ma fonction simple mettant en évidence les numéros. Googler autour de moi, je décide que Longiligne bibliothèque est la meilleure solution. J'ai code suivant:
function formatText() {
var savedSel = rangy.saveSelection();
el = document.getElementById('pad');
el.innerHTML = el.innerHTML.replace(/(<([^>]+)>)/ig,"");
el.innerHTML = el.innerHTML.replace(/([0-9])/ig,"<font color='red'>$1</font>");
rangy.restoreSelection(savedSel);
}
<div contenteditable="true" id="pad" onkeyup="formatText();"></div>
Le problème, c'est après la fonction de fin de travail, l'accent est de retour à la div, mais signe toujours le point à la div de commencer et je peux taper n'importe où, execept div commencer. Également de la console.les types de journaux suivants Rangy warning: Module SaveRestore: Marker element has been removed. Cannot restore selection.
Merci de m'aider à mettre en œuvre cette fonctionnelle. Im ouverte pour une solutiona, non seulement longiligne de la bibliothèque. Merci!
http://jsfiddle.net/2rTA5/ C'est jsfiddle, mais il ne fonctionnent pas correctement(il ne se passe rien quand j'ai tapé les chiffres dans mon div), je ne sais pas, peut-être qu'il m' (première fois code postal via jsfiddle) ou de ressources ne supporte pas contenteditable.
UPD* Im lire les mêmes problèmes sur stackoverflow, mais les solutions ne marche pas à l'adapter à mon cas 🙁
source d'informationauteur Petya petrov
Vous devez vous connecter pour publier un commentaire.
Le problème est que Longiligne de sauvegarder/restaurer le module de sélection des œuvres par l'insertion de marqueur invisible éléments dans le DOM où les limites de la sélection, puis votre code supprime toutes les balises HTML, y compris Longiligne du marqueur éléments (comme le message d'erreur indique). Vous avez deux options:
innerHTML
. Ce sera plus fiable mais plus impliqués.Mise à JOUR
J'ai frappé un caractère d'index de sélection basée sur sauvegarder/restaurer Longiligne (option 2 ci-dessus). C'est un peu rude, mais il fait le travail pour ce cas. Il fonctionne en parcourant les nœuds de texte. Je peux ajouter ceci dans Longiligne dans une certaine forme. (Mise à JOUR le 5 juin 2012: J'ai maintenant mis en œuvre ce, dans un moyen plus fiable, pour Longiligne.)
jsFiddle: http://jsfiddle.net/2rTA5/2/
Code:
Je tiens à remercier Tim pour la fonction, il partage ici avec nous, il était très important pour un projet que je suis en train de travailler sur. Je embeded sa fonction un petit plugin jQuery qui peut être consulté ici: https://jsfiddle.net/sh5tboL8/
plugin ne fait que ce que je devais faire, obtenir le texte sélectionné et le réglage personnalisé de la sélection de texte. Il travaille également sur des zones de texte et contentEditable divs.