cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 2013
-
3 avril 2007 à 11:36
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 2013
-
8 avril 2007 à 12:30
Bonjour à toutes et à tous,
j'aimerais ajouter aux caractères sélectionnées dans une iframe
une balise html. tel que ci-dessous, elle n'est "pas interprétée"
mais "affichée comme du texte".
c'est probablement simple (?) mais je tourne, retourne, reretourne...
et ne trouve pas de solution.
<script type="text/javascript">
Fen=document.getElementById("saisie")
Champ=Fen.document
Champ.body.innerHTML="<label style='background-color:#FFFFAA'>exemple</label> mot un autre ... "
function trait()
{
sel = Champ.selection.createRange()
sel.text = "<label style='background-color:#FFCC99'>"+sel.text+"</label>"
}
</script>
uniquement avec IE ici, il faudra que je la rende compatible avec
les autres navigateurs.
si vous avez la réponse : elle est bienvenue...
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 3 avril 2007 à 16:05
on peut déterminer (?) le mot sur lequel est le curseur
donc repérer sa position et à coups de substr...
mais c'est assez lourd à faire, et pour déterminer correctement le mot ?
et si l'utilisateur veut faire un truc sur plusieurs mots...
je vais peut-être être obligé de voir dans ce sens...
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 3 avril 2007 à 18:44
j'ai du aller faire quelques courses, et ma foi : ce fut salutaire.
je crois que je vais faire :
1° mémoriser les caractères sélectionnés de l'Iframe
2° remplacer cette sélection par "une suite de caractères qui n'existent pas" dans l'Iframe
3° mémoriser l'Iframe modifié dans un textarea
4° remplacer dans ce texarea
"la suite de caractères qui n'existaient pas"
par les balises + "
les caractères sélectionnés du l'Iframe"
5° mettre le textarea dans Iframe
bourrin, mais ça baignera. si vous avez mieux !
Nick et Roro, comme je vous l'ai dis, execCommand j'ai mis en oeuvre
dans une source ici même ( editeur wysiwyg qui fonctionne avec
IE, FF, Opera, K-meleon ... ). mais ne fait pas ce que je voulais.
je vais mettre résolu, et grâce à vous finalement.
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 4 avril 2007 à 07:03
ça fonctionne presque comme je voulais
( exclusif IE pour le moment ,mais simple à harmoniser )
ça doit d'ailleurs ressembler à ce qu'a mis PetoleTeam ( merci à toi )
<html>
<head>
<script type="text/javascript">
var Fen,Champ;
function init()
{
Fen=window.frames['saisie'];
Champ=Fen.document;
Champ.designMode='On';
Fen.focus();
}
function trait()
{
var t=document.getElementById("trv");
//1° mémoriser les caractères sélectionnés de l'Iframe
sel = Champ.selection.createRange();
var mem=sel.text;
//2° remplacer cette sélection par "une suite de caractères qui n'existent pas" dans l'Iframe
var tmp="nimportequoi";
while ( Champ.body.innerHTML.indexOf(tmp)>=0 )
{
tmp+=tmp; // ça finira par être bon !
}
sel.text=tmp;
//3° mémoriser l'Iframe modifié dans un textarea
t.value=Champ.body.innerHTML;
//4° remplacer dans ce textarea "la suite de caractères qui n'existaient pas"
// par les balises + " les caractères sélectionnés du l'Iframe"
t.value=t.value.replace(tmp,"<label style='background-color:#FFCC99' onclick='alert("ok");'>"+mem+"</label>");
//5° mettre le textarea dans Iframe
Champ.body.innerHTML=t.value;
}
</script>
</head>
cs_bultez
Messages postés13615Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 4 avril 2007 à 08:33
//4° remplacer dans ce textarea "la suite de caractères qui n'existaient pas"
// par les balises + " les caractères sélectionnés du l'Iframe"
t.value=t.value.replace(tmp,"<label id='"+tmp+"' style='background-color:#FFCC99' onclick='alert("ok");'>"+mem+"</label>");
//5° mettre le textarea dans Iframe
Champ.body.innerHTML=t.value;
Champ.body.document.getElementById(tmp).onclick=function() { alert("ok"); }
// Champ.body.document.getElementById(tmp).id=''; à faire ou pas
onclick fonctionne là, bien sûr, mais si on fait une 2ème fois trait()
cet onclick disparait du contenu de l'Iframe... curieux ?
<hr />
Cordialement Bul
Vous n’avez pas trouvé la réponse que vous recherchez ?
cerede2000
Messages postés71Date d'inscriptionvendredi 12 janvier 2007StatutMembreDernière intervention 6 septembre 2013 8 avril 2007 à 11:04
Bonjour je suis dans le meme truc que toi, je veut me passé d'execcommand et donc je fait la meme chose.
Voici mon code, qui est semblable a ce qui a deja ete donné.
Ceci pour FireFox:
var selObj = document.getElementById('Saisie').contentWindow.getSelection();
var start = selObj.anchorOffset;
alert(start);
var end = selObj.focusOffset;
alert(end);
var innerValue = tag.contentDocument.body.textContent;
var newStr = innerValue.substr(0,start);
newStr+='<'+balise+'>' + selObj + '</'+balise+'>';
newStr+= innerValue.substr(end,innerValue.length);
tag.contentDocument.body.innerHTML = newStr;
Mais j'ai remarqué un soucis que je n'arrive pas a corrigé, en faite anchorOffset et focusOffset, sont géné par les balise deja presente.
Je m'explique, le texte au depart:
123456789
Je selectionne disons 567 et je le met en gras j'obtient bien ceci:
123456789
Mais si maintenant je selectionne 89 pour les mettres en italique voici ce que j'obtient:
123893456789
Comme on le remarque la balise b a disparu et en plus le texte n'est pas au bon endroit :(
Si quelqu'un a une solution ;)
Merci
j'espèrait une solution "plus simple" pour mon petit cerveau, mes
petites capacités... mais loin d'être persuadé que cela soit possible "facilement"...