encadrer un texte selectionné avec deux balises

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
epsy
Varan
Messages : 1024
Inscription : 21 déc. 2005, 19:58

encadrer un texte selectionné avec deux balises

Message par epsy »

salut,

je suis completement pommé dans toutes les docs sur le designmode... :D :oops:
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
҈ - config- http://fr.enlightenment.org - wikipedia mon amiiii! - JID: epsy arobase :) jaim.at
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Re: encadrer un texte selectionné avec deux balises

Message par calimo »

epsy a écrit :le designmode... :D :oops:
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)?
:shock:
Pour imbriquer du texte entre deux balises <p> et </p> tu écrit simplement

Code : Tout sélectionner

<p>mon texte...</p>
epsy a écrit :j'ai trouvé 'formatblock', mais est-ce que je peut mettre n'importe quelle balise?
Tu parles de quoi là ? :shock: 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 8-)

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.0.4) Gecko/20060508 Firedragon Firefox/1.5.0.4
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
epsy
Varan
Messages : 1024
Inscription : 21 déc. 2005, 19:58

Message 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
҈ - config- http://fr.enlightenment.org - wikipedia mon amiiii! - JID: epsy arobase :) jaim.at
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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.
epsy
Varan
Messages : 1024
Inscription : 21 déc. 2005, 19:58

Message par epsy »

ok, j'ai examiné le code concernant le bbcode(parce que j'arrive mieux à le comprendre que des longs discours :P)

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
҈ - config- http://fr.enlightenment.org - wikipedia mon amiiii! - JID: epsy arobase :) jaim.at
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message 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.
Dernière modification par Benoit le 06 juin 2006, 07:40, modifié 1 fois.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message 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.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 3 invités