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 :

Affilier le nouveau parent après déplacement dynamique d'un div


Sujet :

JavaScript

  1. #41
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re Bonsoir Watilin
    waoh!!! ca c'est un cour majestral !!!! respect

    j'ai a peu près tout pigé sauf peut être pour (ev/event) c'est encore un peu flou disons surtout que c'est assez différent du VB et dérivé qui ont leur propres évènements et il n'y a pas de soucis d'écouteur" c'est surtout ca qui me déroute a vrai dire

    ensuite pour la condition "P"
    c'était une erreur de débutant (autodidacte comme moi) qui pousse pas assez la réflexion

    maintenant c'est fait bien forcement

    dans un texte il peut y avoir bien d'autre balises comme les <em>,<strong> <font> etc....... et donc le P n'était pas suffisant pour la comparaison
    alors j'ai pris le problème a l'envers

    avant c'était si c'est non alors dragged =null autrement dragged = ev.target ............

    maintenant la condition est faite sur le positif et le autrement sur le negatif
    voici la fonction je replacerais la comparaison "ev/event et ev.srcelement" a la bonne place des le départ selon tes recommandations

    en tout cas celle elle fonctionne du tonnerre !!

    j'ai juste un petit sursaut (décalage) des le dragstart que je ne pige pas
    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
    function dragstart(ev)
       {
        if(ev.target.tagName=="DIV" || ev.target.tagName=="IMG"){
     
         ev = ev || event;
         target = ev.target || ev.srcElement;
        dragged = target;
     
        bordure = dragged .style.border;
        oldparent = dragged.parentElement;
        dragged.style.border = "2px dotted #8258FA";
        fX = ev.offsetX;
        fY = ev.offsetY;
        X = ev.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
        Y = ev.clientY + (document.documentElement.scrollTop + document.body.scrollTop);
        DX = 0;
        DY = 0; 
        DX = X - dragged.offsetLeft;
        DY = Y - dragged.offsetTop;
        ev.stopPropagation();
                                                                    ev.returnValue = false;
        if (ev.preventDefault) ev.preventDefault();
             }      
                                                     else{
                                                                         dragged=null;
                                                                          ev.returnValue = false;
                                                                           }
                                                     }
    en tout cas un grand merci pour le temps que tu prends pour moi
    regarde bien comme l'élément dragué sursaute vers la droite un petit peu

    Nom : demo2.gif
Affichages : 258
Taille : 2,00 Mo
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #42
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je pense que j’ai trouvé le problème du « sursaut ».

    Dans ton CSS il y a
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #editeur div{
    display:inline-blok;
    display:block
    float:left;
     margin-left: 50px;
    width:auto;
    overflow: auto;
    clear:both;}
    Déjà, l’expression display: inline-blok; comporte une faute de frappe, du coup elle est ignorée. La suivante manque un point-virgule, elle est lue comme display:block float:left;, syntaxiquement incorrecte, donc ignorée également. Au final tes divs n’ont ni display ni float, et visiblement ça n’empêche pas les choses de fonctionner à peu près bien.

    Ce qui suit est plus intéressant : margin-left: 50px;. Tu remarqueras que le sursaut se produit toujours de 50px vers la droite. Si je supprime cette déclaration, ô magie, plus de sursaut ! En revanche, les divs peuvent dépasser de l’éditeur sur le côté gauche. C’est parce que leur offsetParent n’est pas le bon :
    Code console : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById('red').offsetParent
    > <body>...</body>

    Il te suffit de rajouter postition: relative à ton éditeur pour qu’il devienne l’offsetParent de tes divs. Il n’y a rien de plus à faire
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #43
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonsoir Watilin

    et oui exact c'est bien le margin :50px qui fout le boxon

    je pensait ainsi forcer les div a rester dans l'editeur mais il n'en est rien

    ceci par contre je comprends moins bien
    Il te suffit de rajouter postition: relative à ton éditeur pour qu’il devienne l’offsetParent de tes divs. Il n’y a rien de plus à faire
    c'est le div "éditeur" que je dois mettre en relatif ????


    si le margin ne fonctionne pas il me trouver un truc pour qu'ils reste a l'intérieur peut être une condition simple sur les left top et left+width,top+height > ou < que


    je planche encore sur tes attachevent je pense que je vais garder cela

    par contre des return false et preventdefaults c'est obscure pour moi tes fonctions j'essaie d'analyser et d'interpréter correctement leur significations

    par contre âpres maintes recherches je suis a 90% sur maintenant que je ne peux pas utiliser "nextSibling/previeusSibling"


    il ne fonctionne que sur le PC ou J'ai IE 11 et encore il y a des bugs

    un grand merci pour le retour
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #44
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Je suis certain que ce n’est pas nextSibling qui pose problème, je connais cette propriété depuis bientôt dix ans ! Je viens de vérifier à nouveau, elle est spécifiée dans le DOM niveau 1, donc même IE6 devrait la supporter (IE5 quasiment certain, IE4 probablement).
    Cela dit ça m’intrigue, alors je me suis renseigné. Il semblerait qu’IE construise son DOM de façon bizarre quand le HTML est mal formé. Vérifie que ton balisage est correct avec le validateur. Note qu’une mauvaise utilisation de innerHTML peut mener à un DOM mal construit également.

    Citation Envoyé par patricktoulon Voir le message
    c'est le div "éditeur" que je dois mettre en relatif ????
    Oui, ajoute simplement la déclaration position: relative dans la règle #editeur { ... } que tu as déjà.

    Citation Envoyé par patricktoulon Voir le message
    par contre des return false et preventdefaults c'est obscure pour moi tes fonctions j'essaie d'analyser et d'interpréter correctement leur significations
    Bon j’ai essayé de trouver une ressource qui explique ça clairement et simplement dans les cours JS sur ce site, mais c’est pas vraiment satisfaisant… Je te les mets quand même en fin de post. Je vais te la faire aussi courte que possible :
    dans un navigateur les évènements ont deux aspects, leur propagation et leur comportement par défaut. Tous les évènements n’ont pas de comportement par défaut, par exemple si tu cliques sur un <span>, en temps normal il ne se passe rien. En revanche si tu cliques sur un lien, le navigateur va suivre le lien. Et si tu fais glisser un morceau de texte sélectionné, ce texte va se retrouver déplacé. Ce comportement par défaut, tu peux l’annuler en appelant ev.preventDefault() (ou son équivalent ev.returnValue = false). Des fois tu as besoin de l’annuler, des fois tu as besoin de le garder.

    La propagation des évènements, c’est la façon dont ils voyagent dans le DOM. Ça se produit en deux phases : capture (l’aller), et bouillonnement (le retour). Pendant la phase de capture, l’évènement part de la racine du document, et « descend » dans la hiérarchie jusqu’à son élément cible. Pendant le bouillonnement il fait le chemin inverse. À chaque « étape » sur sa route, c’est-à-dire à chaque élément du DOM, il se manifeste pour donner l’occasion de s’exécuter à un éventuel gestionnaire d’évènement attaché là.

    La plupart du temps, on oublie la phase de capture, car elle n’est pas implémentée dans les premières versions d’IE, et aujourd’hui encore on ne s’en sert que dans de rares cas. Dans document.addEventListener('mousemove', WhereMouse, false), le troisième paramètre false signifie « ne pas prendre en compte la phase de capture ».

    Pour prendre un exemple concret, quand tu commences à déplacer une div, disons #red, un évènement dragstart est généré, qui se manifeste d’abord sur #red (si on oublie la phase de capture). Le gestionnaire de dragstart attaché à #red s’exécute alors. L’évènement va ensuite remonter à ton éditeur, et là rien ne se passe car il n’y a pas de gestionnaire de dragstart attaché ici. Il remonte ensuite à <body>, puis à <html>, puis à l’objet document (ainsi que window, mais ça dépend des évènements et des navigateurs), et termine sa course sans avoir rien déclenché d’autre.

    Lorsque tu appelles ev.stopPropagation() (ou ev.cancelBubble = true), tu stoppes l’évènement dans sa course : il arrête de remonter le DOM.
    Ainsi, quand un dragstart est déclenché sur un <p>, il remonte à la div parente, déclenche un appel à ta fonction dragstart(ev), qui voit alors que la cible de l’évènement est un <p>, et stoppe la propagation de l’évènement. Il ne remontera plus, ça évite que d’autre appels à dragstart viennent parasiter l’action. En revanche, le comportement par défaut s’applique, et le texte du <p> est déplacé.

    http://hornetbzz.developpez.com/tuto...ript/dom/#L5-B
    http://ppk.developpez.com/tutoriels/...ur-votre-site/
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #45
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bon me voila de retour
    j'ai un peu laissé cela de coté pour me detendre et revenir dans mon monde VB

    ca fonctionne mais pas en creation
    il faut que la balise créée ai été posée dans le document puis on la reprend document .geteleme... by .. pour cibler

    bon j'ai quand même un soucis sur l'affiliation pas très grave mais je voudrais bien corriger cela

    quand j'ai des balises pdans les quelles il y des balises(font,em,strike,etc...) la remonté au parent div ne se fait pas si je tombe sur un subsubsub enfant du P par exemple et donc tout le texte du div dragué prend le style de la balise

    il me faudrait un do/while tant que l'élément parent n'est pas un div
    avec cependant le test si on tombe sur body alors le parent et div "editeur" d'office

    une idée ???
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #46
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    il me faudrait un do/while tant que l'élément parent n'est pas un div
    avec cependant le test si on tombe sur body alors le parent et div "editeur" d'office

    une idée ???
    Ben exactement comme tu as dit, mais en code. Supposons que l’élément depuis lequel tu veux remonter se trouve dans une variable nommée cible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var parent = cible;
    do {
      parent = parent.parentElement;
    } while (parent.tagName !== 'DIV' && parent !== document.body);
    La boucle s’arrête sur une de ces deux conditions :
    • le parent est une div
    • le parent est le body

    Ce qui veut dire qu’à la sortie de la boucle, une de ces deux conditions est vraie. Il faut tester laquelle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (parent === document.body) {
      parent = document.getElementById('editeur');
    }

    Sinon, tu connais innerText ? Je pense que ça peut être pratique pour ta fonction nettoyage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    div.innerText = div.innerText;
    Citation Envoyé par la doc
    Quand la propriété innerText est écrite, la chaîne donnée remplace complètement le contenu existant de l’objet.
    Note que ça ne marche que sur des éléments de type bloc, donc les divs de préférence.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #47
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    une solution consiste à mettre une class="drop-accept" sur les éléments potentiellement receveur ce qui peut facilitre les tests et accessoirement permet de jouer avec le .drop-accept:hover.

  8. #48
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ok
    merci les gars

    watilin ok pour la boucle et la seconde condition doit être positive finalement car la boucle doit s'arréter a l'un des deux
    et "!==" fait exactement l'inverse non?
    le test après est logique oui

    nosmoking drop accept ne fonctionnera pas
    comme je l'ai dit plus haut dans le post le drop n'est pas déclenché car le div dragué est en dessous la souris donc walouhh!!!
    je vais verifier et tester tout ca se soir en rentrant
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #49
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Non, c’est bien le test négatif qu’il faut faire : tant qu’on n’est pas sur une div ou le body il faut continuer à remonter.

    Je rejoins NoSmoking à propos du :hover : ce serait bien que tu donnes un retour visuel quand l’élément survolé « accepte » de recevoir l’élément déplacé, je pense que ton application gagnerait beaucoup en qualité, pour relativement peu d’efforts.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #50
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut Re
    Re a oui mince
    Puré. J ai du mal a zaper de vb a js
    C est vrai que j utilise plutot until en VB
    Ok donc je vais Mettre cela en oeuvre

    Merci
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #51
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re probleme le drag continu meme apres avoir laché la souris
    Bonjour watilin

    il y a quelque chose que je ne dois pas comprendre ma fois ??????


    j'ai donc mis le do/while dans la fonction mouseUP

    problème maintenant si je tombe sur autre chose que "DIV" le div continu a me suivre même âpres avoir lâché le bouton de la souris
    je suis obligé de recliquer dessus pour le lâcher a condition qu'il ne se trouve plus sur une balise

    essaie avec le texte en couleur ou même un texte dans un des div

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    <!doctype html>
    <html lang="fr">
     
    <head>
     <meta charset="utf-8">
      <title>patrick WYSIWYG html </title>
    <meta http-equiv="X-UA-Compatible" content="IE=10"> 
    <style>
    p{margin: 0;}
    #editeur{
    width:100%;
    height:1500px;
    border:1px solid black;
    display:inline-block;
    }
    p, img {
        vertical-align: middle;
    }
    #editeur div{
    display:inline-block;
    float:left;
    overflow: none;
    clear:both;}
    </style>
    <script  type= "text/javascript">
    //*******************************************************************************************************************************
       var ed ;
       var DX,DY,oX,oY, fX, fY;
       var newparent;
       var oldparent;
       var dragged=null;
       var bordure;
       var code;
       //typeof window.addEventListener == 'undefined' ? document.attachEvent("onmousemove",WhereMouse) : document.addEventListener('mousemove',WhereMouse,false);
       //typeof window.addEventListener == 'undefined' ? document.attachEvent("onmouseup",drag_onmouseup) : document.addEventListener('mouseup',drag_onmouseup,false);
       document.addEventListener('mousemove',WhereMouse,false);
       document.addEventListener('mouseup',drag_onmouseup,false);
       //document.addEventListener('mousedown',Mdown,false);
     
                                                       /////////////////////////////////////////////////////////////////////////////FONCTION QUI ARRETE LE DEPLACEMENT ET AJUSTE LA POSTION //////////////////////////////////////////////////
       function drag_onmouseup(ev)
       {
        if (dragged != null)
        { 
            dragged.style.border = bordure;
         var rect = dragged.getBoundingClientRect();
         oX = rect.left -9;
         oY = rect.top-1;
         newparent = document.elementFromPoint(oX, oY);
         if (newparent.tagName!="DIV"){
                                                                                              do {  newparent = parent.parentElement;} while (newparent.tagName !== 'DIV' && newparent !== document.body);
                                                                                               if (newparent === document.body) {  newparent = document.getElementById('editeur');}
                                                                                                }
                                                                                               if (newparent != null && oldparent.id != newparent.id)
         {
     
     
                                                                                                newparent.appendChild(dragged);
                                                                                               dragged.style.border = bordure;
          var rP = newparent.getBoundingClientRect();
          var rX = ev.clientX - rP.left;
          var rY = ev.clientY - rP.top;
     
          dragged.style.left = rX - fX + "px";
          dragged.style.top = rY - fY + "px";
     
          oldparent = null;
          newparent = null;
         }
         dragged = null;
        }
     
                                                   }  //On arrête le drag}
     
     
       ////////////////////////////////////////////////////////////////////////////FONCTION QUI DEMARRE LE DRAG //////////////////////////////////////////////////////////
       function dragstart(ev)
       {
                     ev = ev || event;
                    target = ev.target || ev.srcElement;
                                                                 if(target.tagName=="DIV" || target.tagName=="IMG"){
             dragged = target;
             bordure = dragged .style.border;
             oldparent = dragged.parentElement;
             dragged.style.border = "2px dotted #8258FA";
             fX = ev.offsetX;
             fY = ev.offsetY;
             var X = ev.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
             var Y = ev.clientY + (document.documentElement.scrollTop + document.body.scrollTop);
            DX = X - dragged.offsetLeft;
            DY = Y - dragged.offsetTop;
            ev.stopPropagation();
                                                                        ev.returnValue = false;
            if (ev.preventDefault) ev.preventDefault();
             }      
                                                     else{
                                                                          dragged=null;
                                                                          ev.returnValue = false;
                                                                           }
                                                     }
     
       ///////////////////////////////////////////////////////////////////FONCTION QUI DEPLACE LE DIV //////////////////////////////////////////////////////////////
       function WhereMouse(ev)
     
                                                    {
     
                                                                               if (dragged != null)
        {
         Mouse_X = ev.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
         Mouse_Y = ev.clientY + (document.documentElement.scrollTop + document.body.scrollTop);
         Mouse_X -= DX;
         Mouse_Y -= DY;
         dragged.style.left = Mouse_X + 'px';
         dragged.style.top = Mouse_Y + 'px';
         dragged.style.position = "absolute";
        }
             }
     
    //********************************************************************************************************************************
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function selectionne_text()   {
                                  return window.getSelection().getRangeAt(0);
                                             }   
     
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////
    function InsertImage(Data)
    {
      try {
                   var ids="image"+document.getElementsByTagName("img") .length +1;
                                var selection = selectionne_text();
       var selectedText = selection.extractContents();
       var baliseimg = document.createElement("img");
       baliseimg.appendChild(selectedText);
       baliseimg.src=Data;
       baliseimg.id=ids;
                                baliseimg.className="image";
     
    baliseimg.onDragStart="return false" ;
    baliseimg.onMouseDown="return false"; 
     selection.insertNode(baliseimg);
    document.getElementById(ids).width=300;
     document.getElementById(ids).addEventListener("dragstart",dragstart,false);
      }
            catch (e) {alert("Vous devez vous placer sur l'éditeur!");};
    }
     
    /////////////////////////////////////////////////////////////////////////////////
     
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    function insertdiv(){
     var divid="div" + document.getElementsByTagName("div").length;
     var ed = document.getElementById('editeur');
     var selection = selectionne_text();
     var selectedText = selection.extractContents(); 
       var balise = document.createElement('div');
          balise.style.borderRadius = "6%"; 
          balise.style.border="1px solid black";   
          balise.style.width="200px";
          balise.style.height="200px";
          balise.className="divint";
          balise.id=divid      
    //si il y a du texte sélectionné  on englobe le texte avec le div             
                 if (selection.length !=0){
                    balise.appendChild(selectedText );
                    selection.insertNode(balise);
                 }
     
       //si on englobe pas du texte le div est hors du flux (absolute )
            if (selection ==""){
            balise.style.position="absolute";                           
            balise .appendChild(document.createElement('p'));
            ed.appendChild(balise);
     
         }                          
     ed.appendChild(document.createElement('p'));
     document.getElementById(divid).addEventListener("dragstart",dragstart,false);
     
     }
     /////////////////////////////////////////////////////////////////////////////////////////////////////////
    function printDoc() {
     
      var oPrntWin = window.open("","_blank","width=702,height=600,left=400,top=100,menubar=yes,toolbar=yes,resizable=yes,location=no,scrollbars=yes");
      oPrntWin.document.open();
      oPrntWin.document.write("<!doctype html><html><head><title>Print<\/title><\/head><body onload=\"print();\">" + editeur.innerHTML + "<\/body><\/html>");
      oPrntWin.document.close();
    }
    ////////////////////////////////////////////////////////////////////////////////////
    function shadowcolor(coul){
    if (selectionne_text()){   
     
                                            var selection = selectionne_text(); 
     var selectedText = selection.extractContents();
                                            var balisefont = document.createElement("FONT");
                                            balisefont.className="shado";  balisefont.appendChild(selectedText);
                                           var strbal=balisefont.innerHTML;
                                           var colhtml=balisefont.getElementsByTagName("font");
                                                   if (colhtml.length>0){
                                                               for(var i=0;i<colhtml.length;i++){
                                                               var strinnerT=colhtml[i].innerHTML;
                                                               var str = colhtml[i].outerHTML;
                                                               var deb = "class=" + str.split("class=")[1];
                                                               var fin = deb.split(">")[0];                                                                                                                                                                          
                                                               var str2=  str.replace(fin,"");                                                                                                                                                                     
                                                               var bal=str2.substring(0, 7);
     
                                                               if (bal =="<font >"){var strbal=strbal.replace(str,strinnerT);}
                                                               if (bal !="<font >"){ var strbal=strbal.replace(fin,"");}
                                                              // if( colhtml[i].innerHTML==""){ var strbal=strbal.replace(str,"");}
                                                               }
                                                   }
    balisefont.innerHTML=strbal;
    balisefont.style.textShadow = "0px 0px 10px "+coul; 
     
     selection.insertNode(balisefont);
     
                                        }//fin du if selectionnetext
    nettoyage();
    }//fin de fonction shado
     
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function retirshadowcolor(){
    if (selectionne_text()){   
         var selection = selectionne_text(); 
                                            var selectedText = selection.extractContents();
                                            var balisefont = document.createElement("FONT");balisefont.appendChild(selectedText);
    var strbal=balisefont.innerHTML;
    var ll=balisefont.getElementsByTagName("font").length;
     var colhtml=balisefont.getElementsByTagName("font");
                                                   if (colhtml.length>0){
                                                               for(var i=0;i<colhtml.length;i++){
                                                               var strinnerT=colhtml[i].innerHTML;
                                                               var str = colhtml[i].outerHTML;
                                                               var deb = "class=" + str.split("class=")[1];
                                                               var fin = deb.split(">")[0];                                                                                                                                                                          
                                                               var str2=  str.replace(fin,"");                                                                                                                                                                     
                                                               var bal=str2.substring(0, 7);
     
                                                               if (bal =="<font >"){var strbal=strbal.replace(str,strinnerT);}
                                                               if (bal !="<font >"){ var strbal=strbal.replace(fin,"");}
                                                               }
                                                   }
     balisefont.innerHTML=strbal;   selection.insertNode(balisefont);
    var par=balisefont.parentElement;
    var par2=par.parentElement;
    if (par.className=="shado"){
    balisefont.className="shado";
    balisefont.style.textShadow="none";}
     
    nettoyage();
    //editeur.click
    }//fin du if selectionnetext
    }//fin de fonction 
    //////////////////////////////////////////////////////////////
    function nettoyage(){
    var elements=editeur.getElementsByTagName("font");
    for (var i=0;i<elements.length;i++){
    var par=elements[i].parentElement;
    if (elements[i].innerText==""){par.removeChild(elements[i])}
    }//fin de boucle for 
    var elements=editeur.getElementsByTagName("em");
    for (var i=0;i<elements.length;i++){
    var par=elements[i].parentElement;
    if (elements[i].innerText==""){par.removeChild(elements[i])}
    }//fin de boucle for 
     
    }// fin de fonction
    ////////////////////////////////////////////////
     
    function adddragtodiv()
    {
        var Element=document.all;
           for (var i=0; i<Element.length;i++){
                             if( Element[i].tagName=="DIV"||Element[i].tagName=="IMG" ){ Element[i].addEventListener("dragstart",dragstart,false);   }
           }
    }
    </script>
    </head><body>
     
      <button onclick="insertdiv()"> ajouter un div </button>
    <div id="editeur" style="border: 1px solid black; width: 98%; height: 98%; min-height: 600px;" contenteditable="true">
     
    <p> <font size="7"><font class="shado" style="text-shadow: 0px 0px 10px #00ffff;">du <strong><em>te</em></strong></font><font class="shado" style="text-shadow: 0px 0px 10px #0000ff;"><strong><em>xte</em></strong> <em><strong></strong></em><em><strong>da</strong></em></font><font class="shado" style="text-shadow: 0px 0px 10px #ff0000;"><em><strong>ns</strong></em></font><em><strong></strong></em> <font class="shado" style="text-shadow: 0px 0px 10px #99cc00;">l'editeur</font></font></p><p></p><p></p>
        <div class="divint" id="blue" style="border: 1px solid blue; left: 92.8px; top: 194.79px; width: 200px; height: 200px; position: absolute;" ondragstart="dragstart(event)">
           <p>du texte dans celui ci</p>
        </div>
     
        <div class="divint" id="red" style="border: 1px solid red; left: 663.79px; top: 171px; width: 250px; height: 250px; position: absolute;" ondragstart="dragstart(event)">
           <p>du texte dans mon div</p>
       </div>
       <div class="divint" id="green" style="border: 1px solid green; left: 406.79px; top: 134.51px; width: 100px; height: 100px; position: absolute;" ondragstart="dragstart(event)">
           <p>celui la aussi</p>
       </div>
     
     
    </div>
     </body></html>
    il n'y a même plus d'affiliation
    il n'y aurait pas quelque chose de plus precis du genre intersect ou quelque chose du genre
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #52
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Patrick,

    j’ai l’impression que tu n’utilises pas le débogueur inclus dans Internet Explorer. Il est capable d’intercepter les erreurs JavaScript et de passer automatiquement en mode pas-à-pas.

    Avec lui j’ai pu voir rapidement que cette ligne lève une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    } while (newparent.tagName !== 'DIV' && newparent !== document.body);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible d’obtenir la propriété « tagName » d’une référence null ou non définie
    Le problème précis c’est que newparent est null ce qui signifie qu’on est remonté trop haut dans le DOM. On est arrivé jusqu’au nœud racine <html>, et son parentElement est null.

    À partir du point d’où cette erreur est lancée, le reste de la fonction ne sera pas exécuté. Du coup l’instruction dragged = null qui « détache » l’élement de la souris n’est pas exécutée, et l’élément continue à suivre la souris.

    Je crois que c’est ma faute : quand je t’ai donné le code de cette boucle do/while, j’ai pensé que l’élément cible était celui en cours de déplacement, pas celui qui est dessous. Pour éviter de lever une erreur, on va rajouter un test « garde-fou » :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    } while (newparent && newparent.tagName !== 'DIV' && newparent !== document.body);
    Si newparent est null, le résultat du test entier est false et le reste de l’expression n’est pas évalué (on appelle ça une expression court-circuit).

    En-dessous il faudra aussi rajouter une condition pour le cas où on est sortis de la boucle avec un newparent null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!newparent || newparent === document.body) {
      newparent = document.getElementById('editeur');
    }

    Je me permets de faire une petite remarque à propos de tes fonctions shadowcolor et retirshadowcolor : elles utilisent un bricolage à base de innerHTML difficile à comprendre, à priori source d’erreurs et pas efficace. Je te conseillerais de les réécrire si tu en as le temps, en utilisant les méthodes du DOM (createElement, appendChild, etc) comme tu le fais ailleurs dans le même script.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  13. #53
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour watilin
    je n'utilise pas le debogueur parce que j'en ai pas avec mon control

    alors tester dans un fichier html puis placer le code dans mon control oui mais ca ne marche pas pour tout

    et oui forcement la cible c'est le récepteur et non le dragged

    je vais examiner tout ca
    je te remercie pour le coup de main

    après je reconnais que c'est un peu ma faute disons que je navigue entre deux langage et des fois je m'y pers avec la syntaxe

    j'ai beaucoup trop de reflexes VB
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #54
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re je n'y comprends plus rien
    re
    bonjour Watilin je n'y comprends plus rien ca ne fonctionne pas je pense avoir correctement placé les conditions mais c'est toujours en rade
    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
    function drag_onmouseup(ev)
       {
        if (dragged != null)
        { 
            dragged.style.border = bordure;
         var rect = dragged.getBoundingClientRect();
         oX = rect.left -9;
         oY = rect.top-1;
         newparent = document.elementFromPoint(oX, oY);
         if (newparent != null && oldparent.id != newparent.id  )//si le newparent est différent du oldparent
         {
         if(newparent.tagName!="div"){  do {  newparent = newparent.parentElement;} while (newparent.tagName !== 'DIV' && newparent !== document.body);}//on boucle jusqu'au premier div  ou au body 
                            if (newparent === document.body) {  newparent = document.getElementById('editeur');} //si c'est le body alors c'est l'editeur
            newparent.appendChild(dragged);
                               dragged.style.border = bordure;
          var rP = newparent.getBoundingClientRect();
          var rX = ev.clientX - rP.left;
          var rY = ev.clientY - rP.top;
     
          dragged.style.left = rX - fX + "px";
          dragged.style.top = rY - fY + "px";
     
          oldparent = null;
          newparent = null;
         }
         dragged = null;
        }
     
                                                   }  //On arrête le drag}
    code complet dans un html
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    <!doctype html>
    <html lang="fr">
     
    <head>
     <meta charset="utf-8">
      <title>patrick WYSIWYG html </title>
    <meta http-equiv="X-UA-Compatible" content="IE=10"> 
    <style>
    p{margin: 0;}
    #editeur{
    width:100%;
    height:1500px;
    border:1px solid black;
    display:inline-block;
    position: relative;
    }
    p, img {
        vertical-align: middle;
    }
    #editeur div{
    display:inline-blok;
    loat:left;
    width:98%;
    overflow: none;
    clear:both;
    }
    </style>
    <script  type= "text/javascript">
    //*******************************************************************************************************************************
       var ed ;
       var DX,DY,oX,oY, fX, fY;
       var newparent;
       var oldparent;
       var dragged;
       var bordure;
       var code;
       //typeof window.addEventListener == 'undefined' ? document.attachEvent("onmousemove",WhereMouse) : document.addEventListener('mousemove',WhereMouse,false);
       //typeof window.addEventListener == 'undefined' ? document.attachEvent("onmouseup",drag_onmouseup) : document.addEventListener('mouseup',drag_onmouseup,false);
       document.addEventListener('mousemove',WhereMouse,false);
       document.addEventListener('mouseup',drag_onmouseup,false);
       //document.addEventListener('mousedown',Mdown,false);
     
                                                       /////////////////////////////////////////////////////////////////////////////FONCTION QUI ARRETE LE DEPLACEMENT ET AJUSTE LA POSTION //////////////////////////////////////////////////
       function drag_onmouseup(ev)
       {
        if (dragged != null)
        { 
            dragged.style.border = bordure;
         var rect = dragged.getBoundingClientRect();
         oX = rect.left -9;
         oY = rect.top-1;
         newparent = document.elementFromPoint(oX, oY);
         if (newparent != null && oldparent.id != newparent.id  )
         {
         if(newparent.tagName!="div"){  do {  newparent = newparent.parentElement;} while (newparent.tagName !== 'DIV' && newparent !== document.body);}
                            if (newparent === document.body) {  newparent = document.getElementById('editeur');} 
            newparent.appendChild(dragged);
                               dragged.style.border = bordure;
          var rP = newparent.getBoundingClientRect();
          var rX = ev.clientX - rP.left;
          var rY = ev.clientY - rP.top;
     
          dragged.style.left = rX - fX + "px";
          dragged.style.top = rY - fY + "px";
     
          oldparent = null;
          newparent = null;
         }
         dragged = null;
        }
     
                                                   }  //On arrête le drag}
     
       ////////////////////////////////////////////////////////////////////////////FONCTION QUI DEMARRE LE DRAG //////////////////////////////////////////////////////////
       function dragstart(ev)
       {
          ev = ev || event;
         target = ev.target || ev.srcElement;
                     if(target.tagName=="DIV" || target.tagName=="IMG"){
     
        dragged = target;
     
        bordure = dragged .style.border;
        oldparent = dragged.parentElement;
        dragged.style.border = "2px dotted #8258FA";
        fX = ev.offsetX;
        fY = ev.offsetY;
        X = ev.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
        Y = ev.clientY + (document.documentElement.scrollTop + document.body.scrollTop);
        DX = 0;
        DY = 0; 
        DX = X - dragged.offsetLeft;
        DY = Y - dragged.offsetTop;
        ev.stopPropagation();
                    ev.returnValue = false;  
        if (ev.preventDefault) ev.preventDefault();
            }      
                     else{ 
         dragged=null;
         ev.returnValue = false;
         }
         }
     
       ///////////////////////////////////////////////////////////////////FONCTION QUI DEPLACE LE DIV //////////////////////////////////////////////////////////////
       function WhereMouse(ev) { 
                          if (dragged != null)
                        {
                     Mouse_X = ev.clientX + (document.documentElement.scrollLeft + document.body.scrollLeft);
            Mouse_Y = ev.clientY + (document.documentElement.scrollTop + document.body.scrollTop);
            Mouse_X -= DX;
            Mouse_Y -= DY;
            dragged.style.left = Mouse_X + 'px';
            dragged.style.top = Mouse_Y + 'px';
            dragged.style.position = "absolute";
            }
             }
     
    //********************************************************************************************************************************
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function selectionne_text()
       {
     
     
    return window.getSelection().getRangeAt(0);
       }   
     
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////
    function InsertImage(Data)
    {
      try {
                   var ids="image"+document.getElementsByTagName("img") .length +1;
                                var selection = selectionne_text();
       var selectedText = selection.extractContents();
       var baliseimg = document.createElement("img");
       baliseimg.appendChild(selectedText);
       baliseimg.src=Data;
       baliseimg.id=ids;
                                baliseimg.className="image";
     
    baliseimg.onDragStart="return false" ;
    baliseimg.onMouseDown="return false"; 
     selection.insertNode(baliseimg);
    document.getElementById(ids).width=300;
     document.getElementById(ids).addEventListener("dragstart",dragstart,false);
      }
            catch (e) {alert("Vous devez vous placer sur l'éditeur!");};
    }
     
    /////////////////////////////////////////////////////////////////////////////////
     
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    function insertdiv(){
     var divid="div" + document.getElementsByTagName("div").length;
     var ed = document.getElementById('editeur');
     var selection = selectionne_text();
     var selectedText = selection.extractContents(); 
       var balise = document.createElement('div');
          balise.style.borderRadius = "6%"; 
          balise.style.border="1px solid black";   
          balise.style.width="200px";
          balise.style.height="200px";
          balise.className="divint";
          balise.id=divid      
    //si il y a du texte sélectionné  on englobe le texte avec le div             
                 if (selection.length !=0){
                    balise.appendChild(selectedText );
                    selection.insertNode(balise);
                 }
     
       //si on englobe pas du texte le div est hors du flux (absolute )
            if (selection ==""){
            balise.style.position="absolute";                           
            balise .appendChild(document.createElement('p'));
            ed.appendChild(balise);
     
         }                          
     ed.appendChild(document.createElement('p'));
     document.getElementById(divid).addEventListener("dragstart",dragstart,false);
     
     }
     /////////////////////////////////////////////////////////////////////////////////////////////////////////
    function printDoc() {
     
      var oPrntWin = window.open("","_blank","width=702,height=600,left=400,top=100,menubar=yes,toolbar=yes,resizable=yes,location=no,scrollbars=yes");
      oPrntWin.document.open();
      oPrntWin.document.write("<!doctype html><html><head><title>Print<\/title><\/head><body onload=\"print();\">" + editeur.innerHTML + "<\/body><\/html>");
      oPrntWin.document.close();
    }
    ////////////////////////////////////////////////////////////////////////////////////
    function shadowcolor(coul){
    if (selectionne_text()){   
     
                                            var selection = selectionne_text(); 
     var selectedText = selection.extractContents();
                                            var balisefont = document.createElement("FONT");
                                            balisefont.className="shado";  balisefont.appendChild(selectedText);
                                           var strbal=balisefont.innerHTML;
                                           var colhtml=balisefont.getElementsByTagName("font");
                                                   if (colhtml.length>0){
                                                               for(var i=0;i<colhtml.length;i++){
                                                               var strinnerT=colhtml[i].innerHTML;
                                                               var str = colhtml[i].outerHTML;
                                                               var deb = "class=" + str.split("class=")[1];
                                                               var fin = deb.split(">")[0];                                                                                                                                                                          
                                                               var str2=  str.replace(fin,"");                                                                                                                                                                     
                                                               var bal=str2.substring(0, 7);
     
                                                               if (bal =="<font >"){var strbal=strbal.replace(str,strinnerT);}
                                                               if (bal !="<font >"){ var strbal=strbal.replace(fin,"");}
                                                              // if( colhtml[i].innerHTML==""){ var strbal=strbal.replace(str,"");}
                                                               }
                                                   }
    balisefont.innerHTML=strbal;
    balisefont.style.textShadow = "0px 0px 10px "+coul; 
     
     selection.insertNode(balisefont);
     
                                        }//fin du if selectionnetext
    nettoyage();
    }//fin de fonction shado
     
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function retirshadowcolor(){
    if (selectionne_text()){   
         var selection = selectionne_text(); 
                                            var selectedText = selection.extractContents();
                                            var balisefont = document.createElement("FONT");balisefont.appendChild(selectedText);
    var strbal=balisefont.innerHTML;
    var ll=balisefont.getElementsByTagName("font").length;
     var colhtml=balisefont.getElementsByTagName("font");
                                                   if (colhtml.length>0){
                                                               for(var i=0;i<colhtml.length;i++){
                                                               var strinnerT=colhtml[i].innerHTML;
                                                               var str = colhtml[i].outerHTML;
                                                               var deb = "class=" + str.split("class=")[1];
                                                               var fin = deb.split(">")[0];                                                                                                                                                                          
                                                               var str2=  str.replace(fin,"");                                                                                                                                                                     
                                                               var bal=str2.substring(0, 7);
     
                                                               if (bal =="<font >"){var strbal=strbal.replace(str,strinnerT);}
                                                               if (bal !="<font >"){ var strbal=strbal.replace(fin,"");}
                                                               }
                                                   }
     balisefont.innerHTML=strbal;   selection.insertNode(balisefont);
    var par=balisefont.parentElement;
    var par2=par.parentElement;
    if (par.className=="shado"){
    balisefont.className="shado";
    balisefont.style.textShadow="none";}
     
    nettoyage();
    //editeur.click
    }//fin du if selectionnetext
    }//fin de fonction 
    //////////////////////////////////////////////////////////////
    function nettoyage(){
    var mestag=["em","strong","font"];
    for (var i=0;i<mestag.length;i++){
    var elements=editeur.getElementsByTagName(mestag[i]);
    for (var i=0;i<elements.length;i++){
    var par=elements[i].parentElement;
    if (elements[i].innerText==""){par.removeChild(elements[i])}
    }//fin de boucle for mestag
    }//fin de boucle for elements
     
     
    }// fin de fonction
    ////////////////////////////////////////////////
     
    function adddragtodiv()
    {
        var Element=document.all;
           for (var i=0; i<Element.length;i++){
                             if( Element[i].tagName=="DIV"||Element[i].tagName=="IMG" ){ Element[i].addEventListener("dragstart",dragstart,false);   }
           }
    }
    </script>
    </head><body>
     
      <div id="editeur" style="border: 1px solid black; width: 98%; height: 98%; min-height: 600px;" contenteditable="true">
    <p> <font size="7"><font class="shado" style="text-shadow: 0px 0px 10px #00ffff;">du <strong><em>te</em></strong></font><font class="shado" style="text-shadow: 0px 0px 10px #0000ff;"><strong><em>xte</em></strong> <em><strong></strong></em><em><strong>da</strong></em></font><font class="shado" style="text-shadow: 0px 0px 10px #ff0000;"><em><strong>ns</strong></em></font><em><strong></strong></em> <font class="shado" style="text-shadow: 0px 0px 10px #99cc00;">l'editeur</font></font></p><p></p><p></p>
        <div class="divint" id="blue" style="border:1px solid blue; left: 92.8px; top: 194.79px; width: 200px; height: 200px; position: absolute;" ondragstart="dragstart(event)">
           <p>du texte dans celui ci</p>
        </div>
     
        <div class="divint" id="red" style="border:1px solid red; left: 663.79px; top: 171px; width: 250px; height: 250px; position: absolute;" ondragstart="dragstart(event)">
           <p>du texte dans mon div</p>
       </div>
       <div class="divint" id="green" style="border:1px solid green; left: 406.79px; top: 134.51px; width: 100px; height: 100px; position: absolute;" ondragstart="dragstart(event)">
           <p>celui la aussi</p>
       </div>
    </div>
     </body></html>
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #55
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re c'est bon j'ai trouvé
    re
    bonjour a tous c'set bon j'ai trouvé
    l'erreur était simplement une erreur de minuscuie a la place de majuscule DANS LA VERIFICATION DU PARENT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(newparent.tagName!="DIV"){  do {  newparent = newparent.parentElement;} while (newparent.tagName !== 'DIV' && newparent !== document.body);}//on boucle jusqu'au premier div  ou au body 
                            if (newparent === document.body) {  newparent = document.getElementById('editeur');} //si c'est le body alors c'est l'editeur
    une erreur vraiment tout bete
    comme quoi a froid on y vois plus clair

    merci a tous
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Réponses: 19
    Dernier message: 18/04/2008, 11h43
  2. Réponses: 2
    Dernier message: 01/11/2006, 03h18
  3. Réponses: 8
    Dernier message: 30/08/2006, 16h22
  4. Déplacement dynamique de composants à l'exécution
    Par tekilx dans le forum Composants VCL
    Réponses: 8
    Dernier message: 05/07/2005, 10h46
  5. [XSLT] séparation après tri dynamique
    Par MatMeuh dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 26/10/2004, 14h56

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