Page 1 sur 1
encadrer un texte selectionné avec deux balises
Publié : 04 juin 2006, 22:17
par epsy
salut,
je suis completement pommé dans toutes les docs sur le designmode...

j'ai une petite question...comment on fait pour imbriquer un texte selectionné dans deux balises que je peu choisir(dans ce cas des divs, mais je préfererais que ça fonctionne avec tout autre balise)?
j'ai trouvé 'formatblock', mais est-ce que je peut mettre n'importe quelle balise?
Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Re: encadrer un texte selectionné avec deux balises
Publié : 05 juin 2006, 09:25
par calimo
epsy a écrit :le designmode...

Was ist das ? What is it ? Kézako ? Konnépa !
epsy a écrit :j'ai une petite question...comment on fait pour imbriquer un texte selectionné dans deux balises que je peu choisir(dans ce cas des divs, mais je préfererais que ça fonctionne avec tout autre balise)?
Pour imbriquer du texte entre deux balises <p> et </p> tu écrit simplement
epsy a écrit :j'ai trouvé 'formatblock', mais est-ce que je peut mettre n'importe quelle balise?
Tu parles de quoi là ?

J'ai de plus en plus de peine à suivre.
Je te conseille de respirer un grand coup, d'arrêter un temps les champignons, et de revenir dans quelques jours lorsque les choses seront un peu plus claires dans ton esprit
Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.4) Gecko/20060508 Firedragon Firefox/1.5.0.4
Publié : 05 juin 2006, 14:50
par martin
En dehors des commandes spécifiques disponibles avec execCommand, tu es obligé de faire toi même tes sélections/supression/insertion dans le DOM.
'formatblock' ne conviendra pas en dehors de p,h1,..h6,pre. Tu pourrais en fait tricher avec cette commande, mais uniquement pour firefox, et çà ressemble plus à un bug.
Pour être plus précis, tu récupères ce qui est selectionné avec
window.getSelection() pour firefox et opera (standardisé), pour ie tu as document.selection qui est comparable.
A partir de cette
selection tu peux travaillé sur un '
range' (standardisé), pour extraire le contenu.
Ensuite tu peux utilisé les méthodes habituelles pour insérer un nouvel élément, en lui insérant ce que tu as récupéré.
Firefox et opéra ont les
méthodes standardisés citées, IE s'avère particulièrement pénible en ce qui concerne les ranges qui lui sont propres (des '
textRange') et pas toujours d'une logique cohérente avec le DOM...
Bon courage.
Pour Calimo, pour comprendre de quoi il est question :
midas.
Publié : 05 juin 2006, 17:54
par Benoit
C'est pas du tout spécifique à Midas, ici-même lorsque tu cliques sur un boutons de balises BBCode ou des smileys c'est ce qui se passe.
Publié : 05 juin 2006, 20:46
par epsy
martin a écrit :les méthodes habituelles
ah, et, lesquelles?
Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Publié : 05 juin 2006, 21:09
par martin
epsy a écrit :martin a écrit :les méthodes habituelles
ah, et, lesquelles?
createElement(), appendChild(),...
http://developer.mozilla.org/en/docs/DOM:element
http://mozref.com/reference/objects/Node
Benoit a écrit :C'est pas du tout spécifique à Midas, ici-même lorsque tu cliques sur un boutons de balises BBCode ou des smileys c'est ce qui se passe.
euh, epsy parle de designMode, dans gecko il s'agit exactement de midas...
Mais sinon effectivement il y a quelques analogies avec les traitements dont tu parles sur un textarea.
Publié : 05 juin 2006, 21:24
par epsy
ok, j'ai examiné le code concernant le bbcode(parce que j'arrive mieux à le comprendre que des longs discours

)
mais il y a un truc que je ne comprends pas:
pourquoi mettre
Code : Tout sélectionner
theSelection = document.selection.createRange().text;
...
document.selection.createRange().text = bbopen + theSelection + bbclose;
plutot que
Code : Tout sélectionner
theSelection = document.selection.createRange().text;
...
theSelection = bbopen + theSelection + bbclose;
Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
Publié : 05 juin 2006, 23:33
par Benoit
Je ne sais pas trop, c'est dans la boucle pour IE que je n'ai pas écrite. En fait si je ne me trompe pas je suis juste l'auteur de la fonction emoticon, le reste fonctionnait donc je n'ai pas touché
Je suppose que c'est soit pour contourner un bug, soit parce que l'auteur n'a pas vu qu'il avait déjà assigné une variable.
martin: je parlais juste de la manière d'obtenir la sélection. Après effectivement il faut créer des nœuds DOM plutôt que simplement manipuler le texte comme on peut se le permettre ici. Encore que, je ne suis pas persuadé que innerHtml ne fonctionnerait pas. Et il y a des tests sur quirksmode qui indiquent que cette méthode est plus rapide que le DOM.
Publié : 06 juin 2006, 00:50
par martin
Benoit a écrit :martin: je parlais juste de la manière d'obtenir la sélection. Après effectivement il faut créer des nœuds DOM plutôt que simplement manipuler le texte comme on peut se le permettre ici. Encore que, je ne suis pas persuadé que innerHtml ne fonctionnerait pas. Et il y a des tests sur quirksmode qui indique que cette méthode est plus rapide que le DOM.
innerHTML devrait fonctionner, mais ce sera plus compliqué, en ce qui concerne gecko et opera. Comme on utilise les ranges, on récupère un DocumentFragment, on 'vide' la sélection, et on y insère un nouvel élément rempli de ce documentFragment.
Via innerHTML, on va se retrouver à réécrire les méthodes standardisées, à mon avis.
Sinon, j'avais vu ces benchmarks, je serai curieux de voir si les résultats n'ont pas évolué depuis gecko 1.8.