IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

div éditable - changement de fontSize et interligne


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut div éditable - changement de fontSize et interligne
    Bonjour,

    Je construis une appli qui contient une div éditable, dans laquelle un utilisateur peut saisir et mettre en forme du texte.
    Je rencontre des problèmes pour la gestion de la taille de police et de l'interligne.

    Sur ma div, j'ai défini par défaut un font size (16px) et un line-height (=1, donc normalement proportionnel à la taille du texte).

    Pour changer la taille de la police, j'ai un bouton qui lance une commande execCommand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //taille du texte
    	$('#inputFontSize').on("change", function(){
    	    var spanString = $('<span/>', {
    			'text': document.getSelection()
    	    }).css('font-size', this.value).prop('outerHTML');
    	   document.execCommand('insertHTML',false, spanString); //utilisation de la commande insertHTML à la place de FontSize. Semble mieux(?)
                // autres vérifications 
    	});
    Voici maintenant le problème que je rencontre :
    Si je change plusieurs fois la taille du texte d'un paragraphe, je peux me retrouver avec plusieurs balises <span> imbriquées. Cela provient du fait que pour sélectionner un paragraphe, on peut double-cliquer dessus ou bien sélectionner manuellement les mots. Lorsque j'ai des balises imbriquées, je me retrouve avec la taille de la police définie dans un <span> mais avec l'interligne du <span> parent :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div contenteditable="true" class="a" id="editeur">
        <span style="font-size: 27px;">
            <span style="font-size: 13px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vitae convallis libero, a rutrum sapien. Sed nulla massa, commodo et elementum vel, vulputate vitae libero. Fusce non turpis molestie, eleifend risus vitae, lobortis orci.
            </span>
        </span>
    </div>

    Ma question est : comment faire pour que l'interligne corresponde à la taille de la police affichée? ou alors comment nettoyer le html pour supprimer la première balise <span style="font-size: 27px;"> qui a priori ne sert à rien (à part me mettre un "mauvais" interligne!).
    D'avance, merci.


    Voici également le css de la div éditable si besoin
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #editeur {
        border: 1px solid black;
        color: black;
        font-family: Arial;
        font-size: 16px;
        line-height: 1.18;
        overflow: hidden;
        padding: 5px 5px 10px;
        word-wrap: break-word;
    }
    .a {
        height: 380px;
        max-height: 380px;
        max-width: 390px;
        width: 390px;

  2. #2
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Finalement, je suis revenue à l'utilisation de la commande 'fontSize' pour la mise à jour de la taille de la police, et ce pour des raisons de compatibilité avec IE (IE ne reconnait pas la commande insertHTML).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //taille du texte
    $('#inputFontSize').on("change", function(){
    	document.execCommand('fontSize', false,  '7');
    	$("font[size='7']").css("font-size", this.value).removeAttr("size");
    	//autres vérifications
    });
    Après ça, je n'ai pas su reproduire mon problème d'interligne...

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Tu peux utiliser la fonction surroundContents() comme ici : http://jsbin.com/siqugejohu/1/edit?h...console,output

    Mais le problème c'est que les "extrémités" du texte sélectionné doivent appartenir à la même balise pour que cela fonctionne...

    On n'a pas ce problème avec la fonction execCommand();.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Merci.

    Je comprends que la solution proposée par Beginner est en fait l'équivalent de execCommand('insertHTML', false, myText), mais sans le problème d'incompatibilité avec IE. Par contre ça peut renvoyer une erreur...
    Malgré ça, mon problème n'est pas résolu puisque j'ai toujours une différence entre l'interligne et la police, à cause des 2 spans imbriqués. Cela vient du fait que le getSelection() ne retourne pas tout à fait la même chose selon que l'on ait double-cliqué sur le paragraphe ou sélectionné manuellement celui-ci.

    Peut-être qu'une solution serait, à chaque changement de fontSize, de vérifier si le parent est une balise <font> et contient d'autres éléments. Si il n'y a pas d'autres éléments, il faut supprimer la propriété font-size du parent.

  5. #5
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Pourquoi tu utilises de span imbriqués ? Sinon cela ne fonctionne pas même en fixant l'interligne ? Peut-être que l'interligne est différent parce que la taille est différente ? Et aussi l'interligne de la div#editeur est fixé à 1.18 et non à 1 comme tu voulais ?

    En fait je crois que ne doit pas avoir bien compris le problème...

  6. #6
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    En fait ce n'est pas moi qui choisis de faire des spans imbriqués... mais bon comme l'utilisateur peut changer le style à sa guise, ça arrive assez régulièrement.
    Disons qu'à force de manipuler le texte, l'utilisateur ne comprend pas ce qui est affiché. Je peux par exemple me retrouver avec un html comme ça :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div contenteditable="true" class="a" id="editeur">
        <font style="font-size: 32px;">
            <font style="font-size: 11px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eleifend pretium mi non tempus. Quisque tincidunt, justo a lobortis rhoncus, justo risus ultricies velit, non dignissim massa risus fringilla </font>
            purus.
        </font>
    </div>
    Et dans ce cas, quand je sélectionne tout le paragraphe et que je change la taille (sélection 43px) , le texte écrit en 11px ne change pas de taille mais par contre il change d'interligne. Ce qui n'est pas vraiment compréhensible pour l'utilisateur qui a sélectionné une taille de 43 px...
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div contenteditable="true" class="a" id="editeur">
        <font style="font-size: 43px;">
            <font style="font-size: 11px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eleifend pretium mi non tempus. Quisque tincidunt, justo a lobortis rhoncus, justo risus ultricies velit, non dignissim massa risus fringilla </font>
            purus.
        </font>
    </div>

    Même si ça reste compréhensible du point de vue du développeur (j'imagine que le calcul du line-height est basé sur la <font> de plus haut niveau), ce comportement est déroutant pour l'utilisateur.

    Je pense qu'il faudrait que le texte n'ai toujours qu'un seul niveau de <font>, du genre :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div contenteditable="true" class="a" id="editeur">
        <font style="font-size: 11px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eleifend pretium mi non tempus. Quisque tincidunt, justo a lobortis rhoncus, justo risus ultricies velit, non dignissim massa risus fringilla </font>
        <font style="font-size: 43px;">        
            purus.
        </font>
    </div>
    Et dans ce cas là l'interligne devrait être davantage cohérent avec le font-size.

    J'ai pensé à une procédure mais je ne l'ai pas encore codé... Je poste dès que c'est fait (et si ça fonctionne!)

    Et au fait, line-height à 1 ou à 1.18 peu importe. Le principal c'est que ça soit en mode "proportionnel"

  7. #7
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Ah oui, dans ce cas la commande "RemoveFormat" pourrait être utile, elle existe avec la fonction execCommand()... Cela surprime le formatage comme la taille, le gras, l'italique... Sinon supprimer sois-même tous les span ?

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Lucille94 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <div contenteditable="true" class="a" id="editeur">
        <font style="font-size: 32px;">
            <font style="font-size: 11px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque eleifend pretium mi non tempus. Quisque tincidunt, justo a lobortis rhoncus, justo risus ultricies velit, non dignissim massa risus fringilla </font>
            purus.
        </font>
    </div>
    Et dans ce cas, quand je sélectionne tout le paragraphe et que je change la taille (sélection 43px) , le texte écrit en 11px ne change pas de taille mais par contre il change d'interligne. Ce qui n'est pas vraiment compréhensible pour l'utilisateur qui a sélectionné une taille de 43 px...
    Oui c'est normal puisque les balises font n'ont pas de lineHeight fixé mais si tu ajoutes à chaque fois ce style quand tu fixes une taille, cela devrait être bon, non ?

    C'est-à-dire si tu ajoutes par exemple une span comme ça <span style="font-size: 11px; line-height: 1;">Lorem ipsum dolor sit amet,...</span>Mais je ne comprends pas pourquoi les lineHeight changent, si tu ne fixes rien ils devraient tous prendre la valeur par défaut, non ?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Mais puisque la div parente a un line-height de fixé, les enfants héritent de la propriété, non?

  10. #10
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Citation Envoyé par Lucille94 Voir le message
    Mais puisque la div parente a un line-height de fixé, les enfants héritent de la propriété, non?
    Ben c'est ce que je me disais, donc si tu changes le line-height du parent les enfants devraient avoir le même...

    Mais toi tu constates que ce n'est pas le cas ou j'ai mal compris ?

    Citation Envoyé par Lucille94 Voir le message
    Et dans ce cas, quand je sélectionne tout le paragraphe et que je change la taille (sélection 43px) , le texte écrit en 11px ne change pas de taille mais par contre il change d'interligne. Ce qui n'est pas vraiment compréhensible pour l'utilisateur qui a sélectionné une taille de 43 px...
    C'est ça que je n'ai pas compris, l'interligne change si celui du parent change mais ils ont tous le même et c'est ce que tu voulais, non ?

  11. #11
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Si j'ai bien compris le fonctionnement de line-height, ce que j'ai me paraît cohérent.

    J'ai défini un line-height = 1 pour ma div éditable. Selon la doc, cela signifie que le line height est calculé en fonction de la taille de la police (qui dans mon cas varie dans la div). http://www.w3schools.com/cssref/pr_dim_line-height.asp

    Dans mon cas, le texte est bien affiché en 11px (avec un line-height calculé cohérent, je le vois ds Firebug) mais le line height calculé par rapport à l'élément parent (dont la taille est de 32px) prend le dessus, ce qui fait que les lignes sont très écartées par rapport à la taille de la police.

  12. #12
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Quand j'applique cette balise : <span style="font-size: 11px; line-height: 1;">Lorem ipsum dolor sit amet,...</span> le line-height reste toujours à 1 même si on change la taille de la police de la div#Editeur...

    Maintenant c'est clair que si tu as un mot de taille 33px à coté d'un mot de taille 11px ce dernier te semblera plus éloigné de la ligne que le premier mot, mais c'est je pense normal, il y a en plus comme écart la différence entre les deux tailles : 32-11 --> 21px...

    Mais j'ai peut-être pas bien compris le problème...

  13. #13
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Je comprend que ma demande ne soit pas claire... surtout que j'ai parfois du mal à reproduire les erreurs.
    Je mets des copies d'écran pour bien comprendre :
    Nom : Captures.PNG
Affichages : 577
Taille : 138,6 Ko

  14. #14
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Oui je comprends mieux le problème maintenant...

    Alors j'ai fait quelques tests avec OpenOffice pour voir et j'ai regardé le code html qu'il produit... Bon quelques tests plus tard je vois qu'en fait le problème c'est que quand tu changes la taille plusieurs fois on se retrouve avec des balises imbriquées et alors on perd le style de la div#editeur...

    Le truc c'est de revenir au style de la div#editeur à chaque fois juste avant de changer de taille et on peut le faire avec la commande removeformat dont je t'avais parlée...

    Essaye ici : http://jsbin.com/lazejoxepu/edit?js,output

    Par exemple met tout le texte à size 7 puis sélectionne tout le texte sauf le dernier mot et met la talle 3 par exemple et verras...

    Dis-moi si ça va...

    J'ai essayé aussi avec IE8 et ça semble bon chez moi...

  15. #15
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Merci Beginner!!
    ça fonctionne super bien, fini les balises <font> imbriquées!

    Par contre, le problème que je vais avoir, c'est que j'ai simplifié un peu mon code pour l'exemple, mais en fait je travaille avec d'autres commandes : bold, italic, underline, insertUnorderedList, fontName, foreColor, justify[..]
    Dans mon cas, il faudrait donc que je garde quelque part les valeurs de bold, fontName, foreColor, italic, underline (propriétés impactées par le removeFormat) pour les réappliquer ensuite.
    Il risque d'y avoir un problème lorsque ces propriétés ne sont pas les mêmes sur toute la sélection. Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <div contenteditable="true" class="a" id="editeur">
        <font style="font-size: 24px;">
            Lorem ipsum 
            <font color="#2F966B">dolor </font>
            sit amet, 
            <b>consectetur </b>
            adipiscing elit. Nam vitae convallis libero, a rutrum sapien.
        </font>
    </div>
    Si j'applique ton code sur tout le texte, je perds les mots en couleur et en gras...

    J'ai bien essayé de code un truc qui prend le style du parent et le wrap sur les enfants (pour éviter d'avoir les <font> imbriquées) mais ça ne fonctionne pas aussi bien que removeFormat... Et sur ce site, l'algo décrit pour removeFormat n'a pas l'air évident.

  16. #16
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Tout d'abord je voulais dire que j'ai remarqué qu'avec Chrome ça fonctionne bien sans utiliser la commande removeFormat, Chrome fonctionne donc comme les éditeurs sur ce point mais pas Firefox ni IE8...

    Citation Envoyé par Lucille94 Voir le message
    Si j'applique ton code sur tout le texte, je perds les mots en couleur et en gras...
    Et oui c'est ça le problème, avec removeFormat on ne supprime pas seulement la taille... Il faudrait donc un removeFormat qui ne supprime que le formatage souhaitée et ça en effet cela n'est pas évident à faire, il faudrait déjà comprendre comment cette commande fonctionne, j'avais déjà essayé de comprendre il y a quelque temps, d'ailleurs voici le fil : Comment supprimer la mise en forme (formatage) ? dans lequel j'avais aussi posé cette question :

    Peut-être plus difficile : comment supprimer une partie du formatage : genre par exemple je supprime la couleur mais je laisse le gras...
    J'avais trouvé ce plugin : http://ckeditor.com/addon/removeformat pour ckeditor mais cela ne m'avait pas paru évident à comprendre (ils utilisent leur librairie...). Même si dans le code il dit dans un commentaire que la stratégie est simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // We need to check the selection boundaries (bookmark spans) to break
                        // the code in a way that we can properly remove partially selected nodes.
                        // For example, removing a <b> style from
                        //        <b>This is [some text</b> to show <b>the] problem</b>
                        // ... where [ and ] represent the selection, must result:
                        //        <b>This is </b>[some text to show the]<b> problem</b>
                        // The strategy is simple, we just break the partial nodes before the
                        // removal logic, having something that could be represented this way:
                        //        <b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b>
    Il y a la réponse de Watilin à étudier, je pense qu'il doit y avoir des astuces à utiliser...

    Je sais déjà que pour supprimer seulement certains formatages comme le bold ou l'italic ou l'underline... Il suffit de lancer la même commande.

    A suivre...

  17. #17
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2011
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Je me rend bien compte qu'il n'existe pas de solution simple ...

    A toutes fins utiles, je poste mon code maison. ça vaut ce que ça vaut, en tout cas ça semble suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    $('#inputFontSize').on("change", function(){
     
    	document.execCommand('fontSize', false, '7');
    	$("font[size='7']").attr("name", "tempo");
    	$("font[size='7']").css("font-size", this.value).removeAttr("size");
     
    	//nettoyage des enfants
    	if ($("font[name='tempo']").children("font").length > 0){ //mise à jour de la taille du texte pour tous les enfants également
    		$("font[name='tempo']").children("font").css("font-size",'');
    		$("font[name='tempo']").children("font").each(function(){
    			if (this.attributes.length == 1 && $(this).attr("style") == ""){
    				//suppression de la balise font mais pas du contenu
    				$(this).contents().unwrap();
    			}
    		});
    	}
     
    	//nettoyage du parent + freres
     
    	//On garde les propriétés face, color et css:font-size dans un nouvel élément font
    	var face = $("font[name='tempo']").parent().attr("face");
    	var color = $("font[name='tempo']").parent().attr("color");
    	var fontSize = $("font[name='tempo']").parent().css('font-size');
    	var newFont = $('<font/>', {
    		'color': color,
    		'face': face
    	});
    	newFont.css("font-size", fontSize);
     
    	$("font[name='tempo']").parent().contents().each(function(){
    		//si l'élément est différent de l'élément courant, on lui ajoute les propriétés du parent
    		//console.log($(this).prop('tagName'));
    		if($(this)[0] != $("font[name='tempo']")[0] && $(this).prop('tagName') != 'BR'){
    			$(this).wrapAll(newFont);
    		}
    	});
    	//on supprime la balise du parent (uniquement si c'était un <font>, on ne veut pas supprimer la div éditable)
    	$("font[name='tempo']").parent("font").contents().unwrap();
     
    	newFont.remove();						
    	$("font[name='tempo']").removeAttr("name");
     
    });
    Je me suis focalisée sur les propriétés color de font-size car ce sont ces propriétés que j'ai au niveau des balises <font>. Le reste est géré avec des balises spécifiques : <b>, <u>, ...
    ça ne fonctionne pas très bien, on perd color et face si ces propriétés ne sont pas les mêmes pour toute la sélection...

    Du coup je ne sais pas ce qui est le plus simple : reporter les propriétés du parent sur les freres ou bien faire un removeFormat et remettre les propriétés comme avant (sauf fontSize).

  18. #18
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Ah ben tant mieux si vous avez trouvé une solution.

    Comme je disais sur Chrome cela fonctionne bien aussi alors peut-être que pour les autres navigateurs, il faut utiliser la fonction execCommand(); avec des paramètres particuliers ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/07/2013, 18h31
  2. Réponses: 2
    Dernier message: 11/02/2010, 17h37
  3. show hide div et changement couleur
    Par innommables dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/03/2009, 20h12
  4. Div et changement de place
    Par RideKick dans le forum jQuery
    Réponses: 2
    Dernier message: 10/12/2008, 15h30
  5. div éditable tous naviagateurs
    Par franfr57 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 31/10/2008, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo