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 :

récupérer un élément


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut récupérer un élément
    Bonjour,
    Il semble que j'ai un probleme pour afficher une infobulle avec une position relative à un élément
    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
    <HEAD>
      <TITLE>Feuille de résultats</TITLE>
      <SCRIPT LANGUAGE="JavaScript" type="text/javascript">
        var IB=new Object;
        var posY=0;
        var yOffset=-5;
        function AffBulle(eleID, texte, xOffset) {
          contenu="<TABLE border=0 cellspacing=0 cellpadding="+IB.NbPixel+"><TR bgcolor='"+IB.ColContour+"'><TD><TABLE border=0 cellpadding=2 cellspacing=0 bgcolor='"+IB.ColFond+"'><TR><TD><FONT size='-1' color='"+IB.ColTexte+"'>"+texte+"</FONT></TD></TR></TABLE></TD></TR></TABLE>&nbsp;";
          if (document.all) {
            bulle.innerHTML=contenu;
            var ele=document.all["+eleID+"];
            yOffset=calculeOffsetTop(ele);
            document.all["bulle"].style.top=yOffset;
            document.all["bulle"].style.left=xOffset;
            document.all["bulle"].style.visibility="visible";
          }
        }
     
        function getMousePos(e) {
          if (document.all) {
            posY=event.y+document.body.scrollTop;
          }
          else {
            posY=e.pageY;
          }
        }
     
        function HideBulle() {
          if (document.all) {
            document.all["bulle"].style.visibility="hidden";
          }
         }
     
        function InitBulle(ColTexte,ColFond,ColContour,NbPixel) {
          IB.ColTexte=ColTexte;IB.ColFond=ColFond;IB.ColContour=ColContour;IB.NbPixel=NbPixel;
          if (document.all) {
            document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden'></DIV>");
            document.onmousemove=getMousePos;
          }
        }
     
        function calculeOffsetTop(r){
          return calculeOffset(r,"offsetTop")
        }
        function calculeOffset(element,attr){
          var offset=0;
          while(element){
            offset+=element[attr];
            element=element.offsetParent;
          }
          return offset;
        }
      </SCRIPT>
    </HEAD>
    <BODY>
      <SCRIPT language="JavaScript">
        InitBulle("black","#FFCC66","orange",1);
      </SCRIPT>
    et plus loin dans une table... une cellule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td width=30% id='H3480'><font size=-1><A style="color: black; text-decoration: none" href="#" onMouseOver="AffBulle('H3480', 'mon super text', 180)" onMouseOut="HideBulle()">See this ?</A></font></td>
    Ce que je cherche à faire c'est à afficher mon info bulle à quelques pixels à droite de mon élément et à "la même hauteur" que lui.
    Pour la droite aucun soucis puisque je passe le nombre de pixel, ici 180.
    le soucis est avec la hauteur d'affichage car je veux que l'info bulle soit alligné avec mon text "See this ?"
    Avec la position de la sourie ça marche moyen car suivant que j'accede au lien par le dessus ou par le dessus l'info bulle se décalle soit vers le haut soit vers le bas.
    Bref mon idée c'est de récupéper l'offset de ma cellule et ensuite à partir de là de calculer la position Y de mon info bulle pour l'aligner avec ma cellule (qui elle même contient le lien).
    J'ai l'impression que c'est cette partie du code qui ne marche pas donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            var ele=document.all["+eleID+"];
            yOffset=calculeOffsetTop(ele);
    Pour info c'est une simple page html sans <FORM> ni <DIV> mais c'est peut etre là aussi le soucis...
    Comment je peux récupérer mon élément ?
    J'ai l'impressin qu'il me faudrait peut etre utiliser des <DIV> </DIV> mais je ne sais pas où.
    J'ai essayé de remplacer ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <td width=30% id='H3480'><font size=-1><A style="color: black; text-decoration: none" href="#" onMouseOver="AffBulle('H3480', 'mon super text', 180)" onMouseOut="HideBulle()">See this ?</A></font></td>
    par ça mais sans succes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id='H3480'><td width=30%><font size=-1><A style="color: black; text-decoration: none" href="#" onMouseOver="AffBulle('H3480', 'mon super text', 180)" onMouseOut="HideBulle()">See this ?</A></font></td></div>
    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut


    document.all est une syntaxe obsolète depuis des décennies... c'est spécifique IE (et Opera) et ne doit plus être utilisé depuis IE4 et l'apparition de getElementById !

    EDIT :
    J'avais pas vu le pire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var ele=document.all["+eleID+"];


    Tu crois vraiment que tu as un élément dont le nom est +eleID+ ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    ok mais même en nettoyant mon code des document.all
    et en corrigeant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var ele=document.getElementById(eleID);
    yOffset=calculeOffsetTop(ele);
    ca ne marche pas mieux (carrement plus d'info bulle visible alors que si je supprime ces 2 lignes ça marche bien mais c'est dependant de la position sourie
    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
    <SCRIPT LANGUAGE="JavaScript" type="text/javascript">
        var IB=new Object;
        var posY=0;
        var yOffset=-5;
        function AffBulle(eleID, texte, xOffset) {
          contenu="<TABLE border=0 cellspacing=0 cellpadding="+IB.NbPixel+"><TR bgcolor='"+IB.ColContour+"'><TD><TABLE border=0 cellpadding=2 cellspacing=0 bgcolor='"+IB.ColFond+"'><TR><TD><FONT size='-1' color='"+IB.ColTexte+"'>"+texte+"</FONT></TD></TR></TABLE></TD></TR></TABLE>&nbsp;";
            document.getElementById("bulle").innerHTML=contenu;
            document.getElementById("bulle").style.top=posY+yOffset;
            document.getElementById("bulle").style.left=xOffset;
            document.getElementById("bulle").style.visibility="visible";
        }
     
        function getMousePos(e) {
          if (document.all) {
            posY=event.y+document.body.scrollTop;
          }
          else {
            posY=e.pageY;
          }
        }
     
        function HideBulle() {
          document.getElementById("bulle").style.visibility="hidden";
        }
     
        function InitBulle(ColTexte,ColFond,ColContour,NbPixel) {
          IB.ColTexte=ColTexte;IB.ColFond=ColFond;IB.ColContour=ColContour;IB.NbPixel=NbPixel;
          document.onmousemove=getMousePos;
          document.write("<DIV id='bulle' style='position:absolute;top:0;left:0;visibility:hidden'></DIV>");
        }
     
        function calculeOffsetTop(r){
          return calculeOffset(r,"offsetTop")
        }
        function calculeOffset(element,attr){
          var offset=0;
          while(element){
            offset+=element[attr];
            element=element.offsetParent;
          }
          return offset;
        }
      </SCRIPT>

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    L'élément à l'attribut id passé en paramètre ?
    Montre nous le code HTML.

    A+.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    Bon alors après un gros coup de bol j'ai trouvé ça:
    http://www.quirksmode.org/dom/w3c_cs...l#offsetParent

    et donc sous IE7 le offsetTop ne marche pas apparement alors que le offsetLeft marche.

    Dommage c'est justement le offsetTop que je voullais.
    Bon et bien ce n'est pas grave, l'info bulle ne sera que pour ceux qui utilisent les derniers IE et puis voilà ^^

    Merci pour votre aide

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    Citation Envoyé par thrakkazz
    Ce que je cherche à faire c'est à afficher mon info bulle à quelques pixels à droite de mon élément et à "la même hauteur" que lui.
    cela se fait en CSS de nos jours...
    Code html : 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
    <!DOCTYPE html>
    <html>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>CSS Info Bulle</title>
    <style type="text/css">
    html, body {
      font-family : Verdana;
      font-size : 1.0em;
    }
    span.bulle {
      border-bottom : 1px dotted #f08080;  
      cursor : pointer;  
    }
    span.bulle span{
      display:none;
    }
    span.bulle:hover span{
      position : absolute;
      display : inline;
      padding : 5px;  
      padding-right : 5px;    
      background-color : #fefeee;  
      border : 1px solid #f0f080;  
    }
    </style>
    <body>
    <p>
    Ce paragraphe contient une <span class="bulle">info Bulle<span>Texte de l'info Bulle</span></span> et le texte du texte sans importance...
    </p>
    </body>
    </html>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupèrer les éléments d'une JList
    Par Orian dans le forum Composants
    Réponses: 13
    Dernier message: 10/09/2006, 11h53
  2. StrinkTokenizer : récupérer les éléments "vides"
    Par Yannick_from_31 dans le forum Langage
    Réponses: 3
    Dernier message: 21/08/2006, 10h29
  3. Comment récupérer les éléments d'un getComments
    Par AlexandraS dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2006, 11h21
  4. Réponses: 5
    Dernier message: 22/02/2006, 17h32
  5. Comment récupérer les éléments d'un autre programme ?
    Par Henri_13 dans le forum API, COM et SDKs
    Réponses: 22
    Dernier message: 29/11/2005, 00h16

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