Valid XHTML     Valid CSS2    


        //    (gH)   -_-  testdom.js  ;  TimeStamp (unix) : 16 Juin 2009 vers 14:44
        
        // ###############################################################
        
        function reset_infos()  {
        
        // ###############################################################
        
        document.getElementById("infos").value = ""
        
        return(false)
        
        }  // fin de fonction reset_infos
        
        // ###############################################################
        
        function ecrit_infos(mesTxt)  {
        
        // ###############################################################
        
        document.getElementById("infos").value  += mesTxt + "\n" ;
        
        return(false)
        
        }  // fin de fonction ecrit_infos
        
        // ###############################################################
        
        function ecrit_infos_sansrc(mesTxt)  {
        
        // ###############################################################
        
        document.getElementById("infos").value  += mesTxt  ;
        
        return(false)
        
        }  // fin de fonction ecrit_infos_sansrc
        
        // ###############################################################
        
        function analyse_cellule() {
        
        // ###############################################################
        
        tv  = document.getElementById("ventes") // tableau des ventes
        msg = "-- Analyse d'une cellule\n"
        ecrit_infos(msg) ;
        
        // ---------------------------------------------------------
        
        lig  = document.getElementById("ligne").value ;
        
        tdl = typeof(lig)
        if (tdl=="undefined") {
          msg = "Il n'y a rien dans le champ correspondant au numéro de ligne "
          ecrit_infos(msg)
          return(false)
        } //
        
        msg = "Numéro de ligne transmis : \""+lig+"\" typé en "+tdl
        ecrit_infos(msg)
        
        ilig = parseInt(lig,10)
        tdi  = typeof(ilig)
        
        if (isNaN(ilig)) {
          msg = "Cette valeur ne correspond pas à un nombre entier"
          ecrit_infos(msg)
          return(false)
        } ; // fin de si
        
        msg = "après conversion en entier, ce numéro vaut : "+ilig+" typé en "+tdi
        ecrit_infos(msg)
        
        idlig = ilig - 1
        
        msg   = "indice de ligne interne : "+idlig
        ecrit_infos(msg)
        
        // on teste s'il déborde
        
        leslignes   = tv.getElementsByTagName("tr")
        nblig = leslignes.length
        
        if (idlig>nblig-1) {
          msg = "Il n'y a que "+nblig+" ligne(s). L'indice "+idlig+" est donc incorrect."
          ecrit_infos(msg)
          return(false)
        } ; // fin de si
        
        if (idlig<0) {
          msg = "Le premier indice possible en interne est 0. L'indice "+idlig+" est donc incorrect."
          ecrit_infos(msg)
          return(false)
        } ; // fin de si
        
        ecrit_infos("")
        
        // ---------------------------------------------------------
        
        col  = document.getElementById("colonne").value ;
        tdc = typeof(col)
        if (tdc=="undefined") {
          msg = "Il n'y a rien dans le champ correspondant au numéro de colonne "
          ecrit_infos(msg)
          return(false)
        } //
        
        msg = "Numéro de colonne transmis : \""+col+"\" typé en "+tdc
        ecrit_infos(msg)
        
        jcol = parseInt(col,10)
        tdj  = typeof(jcol)
        
        if (isNaN(jcol)) {
          msg = "Cette valeur ne correspond pas à un nombre entier"
          ecrit_infos(msg)
          return(false)
        } ; // fin de si
        
        msg = "après conversion en entier, ce numéro vaut : "+jcol+" typé en "+tdj
        ecrit_infos(msg)
        
        jdcol = jcol - 1
        
        msg   = "indice de colonne interne : "+jdcol
        ecrit_infos(msg)
        
        // on teste s'il déborde
        
        if (jdcol<0) {
          msg = "Le premier indice possible en interne est 0. L'indice "+jdcol+" est donc incorrect."
          ecrit_infos(msg)
          return(false)
        } ; // fin de si
        
        maligne     = leslignes[idlig]
        mescolonnes = maligne.getElementsByTagName("td")
        
        nbcol = mescolonnes.length
        
        // c'est peut-etre du th
        
        if (nbcol==0) {
            mescolonnes = maligne.getElementsByTagName("th")
            if (mescolonnes) { nbcol = mescolonnes.length }
        } ; // fin de si
        
        
        if (jdcol>nbcol-1) {
          msg = "Pour cette ligne, il n'y a que "+nbcol+" colonnne(s). L'indice "+jdcol+" est donc incorrect."
          ecrit_infos(msg)
          return(false)
        } ; // fin de si
        
        // ---------------------------------------------------------
        
        maCase      = maligne.cells[jdcol]
        msg =  "La cellule est, en interne "+maCase  // HTMLTableCellElement
        ecrit_infos(msg)
        
        // pas de nodeValue
        //   msg =  "En tant que noeud, elle vaut "+maCase.nodeValue
        //   ecrit_infos(msg)
        
        modet = document.getElementById("modet")
        // modet est object HTMLInputElement]
        
        if (modet.checked) {
          msg = "\nAffichage en mode texte\n"
          ecrit_infos(msg)
          msg = sousArbreDom(maCase)
          ecrit_infos(msg)
          msg = "\n -- fin d'affichage en mode texte"
        } // fin si mode texte
        
        modea = document.getElementById("modea")
        
        if (modea.checked) {
          msg = "\nAffichage en mode arbre\n"
          ecrit_infos(msg)
          sousArbreDomGraphique(maCase,1,1)
          msg = "\n -- fin d'affichage en mode arbre"
        } // fin si mode texte
        
        // ---------------------------------------------------------
        
        msg = "\nFin de l'analyse de la cellule"
        ecrit_infos(msg) ;
        
        } // fin de fonction analyse_cellule
        
        // ###############################################################
        
        function modifie(nature)  {
        
        // ###############################################################
        
        /* récupération des valeurs */
        
        ilig  = document.getElementById("ligne").value ;
        jcol  = document.getElementById("colonne").value ;
        
        msg  = "Tentative de modification de la case " ;
        msg += "en ligne "+ilig+" colonne "+jcol ;
        msg += " en mode "+nature+"\n"
        ecrit_infos(msg) ;
        
        /* recherche dans le tableau */
        
        nomTableau  = "ventes"
        leTableau   = document.getElementById(nomTableau)
        lesLignes   = leTableau.getElementsByTagName("tr")
        // oui mais les indices commencent à 0
        ilig_1      = ilig-1
        jcol_1      = jcol-1
        maLigne     = lesLignes[ilig_1]
        mesColonnes = maLigne.getElementsByTagName("td")
        maCase      = mesColonnes[jcol_1]
        
        msg  = "son contenu en TD était *"
        msg +=  sousArbreDom(maCase)
        msg += "*"
        ecrit_infos(msg) ;
        
        maCase      = maLigne.cells[jcol_1]
        msg  = "sa nature était *"
        msg += maCase
        msg += "*"
        ecrit_infos(msg) ;
        
        
        msg  = "son nombre d'enfants "
        nbe  = maCase.childNodes.length
        msg += nbe
        ecrit_infos(msg) ;
        
        msg  = "le type de son premier enfant est "
        tdpe = maCase.childNodes[0].nodeType
        msg += tdpe
        ecrit_infos(msg) ;
        
        msg  = "description de son parent (balise <td>) :"
        atd  = maCase.attributes
        for (ida=0;ida<atd.length;ida++) {
             msg +=  " Attribut "+(1+ida)+" : "
             msg += atd[ida].name + " ==> "
             msg += atd[ida].value
             // maCase.removeAttribute(atd[ida].name)
        } // fin pour
        ecrit_infos(msg) ;
        
        
        if (nature=="txt") {
        
             nouveauTexte =  document.getElementById("nvt").value
             msg = "\non remplace le contenu par : \""+nouveauTexte+"\""
             ecrit_infos(msg) ;
        
             if ((tdpe==3) && (nbe==1)) { // remplacement simple d'un noeud texte
               // ok pour document.getElementById(nomTableau).getElementsByTagName("tr")[ilig_1].
               //                getElementsByTagName("td")[jcol_1].childNodes[0].nodeValue = nouveauTexte
               maCase.childNodes[0].nodeValue = nouveauTexte
             } else {
               while (maCase.firstChild) {
                 maCase.removeChild(maCase.firstChild)
               } // fin de tant que
               nouvelElement = document.createTextNode(nouveauTexte)
               maCase.appendChild(nouvelElement)
             } // fin de si
        
        /* remarque : le texte suivant marche tout aussi bien :
        
               maCase.innerHTML = nouveauTexte
        
        */
        
        } // fin de si
        
        ecrit_infos("et voilà !") ;
        
        if (nature=="html") {
             nouveauHtml =  document.getElementById("nvh").value
             msg = "\non remplace le contenu par : \""+nouveauHtml+"\""
             ecrit_infos(msg) ;
        
            maCase.innerHTML = nouveauHtml
        } // fin de si
        ecrit_infos("et voilà !") ;
        
        return( false )
        
        }  // fin de fonction modifie
        
        // ###############################################################
        
        function clones() {
        
        // ###############################################################
        
        // on clone le tableau original
        
        cloneV = document.getElementById("ventes").cloneNode(true)
        
        }  // fin de fonction clones
        
        // ###############################################################
        
        function taborg() {
        
        // ###############################################################
        
        attri  = 0
        finMsg = " (sans attributs)"
        if (document.getElementById("retr_tn").checked) { attri = 0 }
        if (document.getElementById("retr_to").checked) { attri = 1 }
        if (attri==1) { finMsg = " (avec attributs)" }
        
        msg = "Retour au tableau original "+finMsg+" sans recharger la page.\n"
        ecrit_infos(msg) ;
        
        lesTr = document.getElementById("ventes").getElementsByTagName("tr")
        ancTr = cloneV.getElementsByTagName("tr")
        msg   = "Il y a "+lesTr.length+" lignes à remettre."
        ecrit_infos(msg) ;
        idl = 0 ;
        while (idl<lesTr.length) {
          msg = " restauration de la ligne "+idl
        //  ecrit_infos(msg) ;
          laLig = lesTr[idl]
          vxLig = ancTr[idl]
          nbCol = laLig.cells.length
          // on fait l'impasse sur les attributs de <tr> ?
          jdc   = 0
          while (jdc<nbCol) {
            if (attri==0) { // sans attribut de cellule
                aval = laLig.cells[jdc].innerHTML
                nval = sousArbreDom(vxLig.cells[jdc],1,0)
                // il faut enlver td ou th
                nval = nval.replace(/<td>/,"")
                nval = nval.replace(/<\/td>/,"")
                nval = nval.replace(/<th>/,"")
                nval = nval.replace(/<\/th>/,"")
                msg  = "    en colonne "+jdc+" à la place de "+aval+" on met "+nval
        //        if (jdc<=1) { ecrit_infos(msg) ; }
                laLig.cells[jdc].innerHTML = nval
            } else { // avec attributs
                aval = laLig.cells[jdc].innerHTML
                nval = vxLig.cells[jdc].innerHTML
                msg  = "    en colonne "+jdc+" à la place de "+aval+" on met "+nval
        //        ecrit_infos(msg) ;
                laLig.cells[jdc].innerHTML = vxLig.cells[jdc].innerHTML
                // passons aux attributs du parent (<td>)
                leTd = laLig.cells[jdc]
                vxTd = vxLig.cells[jdc]
                vtd  = vxTd.attributes
                nba = vtd.length
                if (nba>0) {
                    msg  = "    "+nba+"    anciens attributs "
        //            ecrit_infos(msg) ;
                    for (ida=0;ida<vtd.length;ida++) {
                       msg  = "        ancien attribut numéro "+ida+" nom = "+vtd[ida].name+" valeur = "+vtd[ida].value
        //               ecrit_infos(msg) ;
                       leTd.setAttribute(vtd[ida].name,vtd[ida].value)
                    } // fin pour ida
                } // fin si
            } // fin de si
            jdc++
          } // fin de tant que
        
          idl++
        } // fin de tant que
        msg  = "Et voilà."
        ecrit_infos(msg) ;
        
        return( false )
        
        }  // fin de fonction taborg
        
        // ###############################################################
        
        function nocolor4tds() {
        
        // ###############################################################
        
        lesTr = document.getElementById("ventes").getElementsByTagName("tr")
        msg   = "Suppression des couleurs de case..."
        ecrit_infos(msg) ;
        idl = 0 ;
        
        pom =  document.getElementById("pomme") ;
        //pom.setAttribute(class,"vide") ;
        //pom.setAttribute(className,"vide") ;
        pom.className = "vide" ; // pour IE
        
        // pour chaque ligne ("<tr>") du tableau
        
        while (idl<lesTr.length) {
        
          // suppression des attributs pour la cellule
        
          laLig = lesTr[idl]
          nbCol = laLig.cells.length
          jdc   = 0
          while (jdc<nbCol) {
            maCase = laLig.cells[jdc]
            atd  = maCase.attributes
            for (ida=0;ida<atd.length;ida++) {
               maCase.className = "vide"
               maCase.removeAttribute(atd[ida].name)
            } // fin pour
            jdc++
          } // fin de tant que
        
          // suppression des attributs pour l'élément
        
          lesTd = laLig.getElementsByTagName("td")
          nbTd  = lesTd.length
          jdc   = 0
          while (jdc<nbTd) {
            leTd = lesTd[jdc]
            // leTd.setAttribute(class,"vide")
            // leTd.setAttribute(className,"vide")
            atd  = leTd.attributes
            for (ida=0;ida<atd.length;ida++) {
               leTd.className = "vide" // pour IE
               leTd.removeAttribute(atd[ida].name)
            } // fin pour
            jdc++
          } // fin de tant que
        
          // on passe à la ligne suivante
          idl++
        } // fin de tant que
        msg   = "Terminée (remarque : on n'a pas supprimé les couleurs \"internes\")."
        ecrit_infos(msg) ;
        
        return( false )
        
        }  // fin de fonction nocolor4tds
        
        // ###############################################################
        
        function description_l2()   {
        
        // ###############################################################
        
        attri  = 0
        finMsg = " (sans attributs)"
        if (document.getElementById("attr_tn").checked) { attri = 0 }
        if (document.getElementById("attr_to").checked) { attri = 1 }
        if (attri==1) { finMsg = " (avec attributs)" }
        
        numligsel = document.getElementById("numligsel")
        numlig    = numligsel.selectedIndex
        
        msg = "Description du tableau ventes, ligne "+(1+numlig)+finMsg+"\n"
        ecrit_infos(msg) ;
        ecrit_infos(sousArbreDom(document.getElementById("ventes").getElementsByTagName("tr")[numlig],1,attri))
        ecrit_infos("") ;
        
        
        // ###############################################################
        
        } // fin de fonction description_l2
        
        // ###############################################################
        
        function arbre_l2()   {
        
        // ###############################################################
        
        attri  = 0
        finMsg = " (sans attributs)"
        if (document.getElementById("attr_tn").checked) { attri = 0 }
        if (document.getElementById("attr_to").checked) { attri = 1 }
        if (attri==1) { finMsg = " (avec attributs)" }
        
        numligsel = document.getElementById("numligsel")
        numlig    = numligsel.selectedIndex
        
        msg = "Arbre du tableau ventes, ligne "+(1+numlig)+finMsg+"\n"
        ecrit_infos(msg) ;
        depart = document.getElementById("ventes").getElementsByTagName("tr")[numlig]
        sousArbreDomGraphique(depart,1,attri)
        ecrit_infos("") ;
        
        } // fin de fonction arbre_l2
        
        // ###############################################################
        
        function ajouteBoutonsDeTri(sens) { // sens ="ligne" ou "colonne"
        
        // ###############################################################
        
        tvn  = document.getElementById("ventes").className
        
        msg = "la classe du tableau ventes était " + tvn + " sens demandé : " + sens
        ecrit_infos(msg) ;
        
        // on ajoute la classe qu'il faut si elle n'était pas déjà présente
        
        if (sens=="ligne") {
           if (tvn.indexOf("triLig") == -1) { tvn += " triLig" }
           // if (tvn.indexOf("triCol") != -1) { tvn  = tvn.replace(" triCol","") }
        } else {
           if (tvn.indexOf("triCol") == -1) { tvn += " triCol" }
           // if (tvn.indexOf("triLig") != -1) { tvn  = tvn.replace(" triLig","") }
        } // fin de si
        
        msg = "elle devient " + tvn
        ecrit_infos(msg) ;
        
        document.getElementById("ventes").className =tvn
        
        initialisationDesTableaux()
        
        } // fin de fonction ajouteBoutonsDeTri
        
        // ###############################################################
        
        function suppressionDesBoutonsDeTri() {
        
        // ###############################################################
        
        txt  = "th><span onclick='tri_lig(this, 0);return false;' class='sortheader'>"
        txt += "<span senstri='d' class='triLig'><input type='button' value='d' class='vert_clair'></input></span>"
        txt += "<span class='gbleuf'>Mois</span>Bien joué !</span></th>"
        msg = "\nAU DEPART, ON A : "+txt
        ecrit_infos(msg) ;
        tabTxt = txt.split(/</)
        debTxt = ""
        finTxt = ""
        lonTab = tabTxt.length
        
        for (ide=0;ide<lonTab;ide++) {
          ok    = 1
          nelt  = "<" + tabTxt[ide]
          msg   = " indice "+ide+" elt = " + nelt
          ecrit_infos(msg) ;
        } // fin pour ide
        msg = ""
        ecrit_infos(msg) ;
        
        for (ide=0;ide<(lonTab/2)+1;ide++) {
          ok    = 1
          nelt  = "<" + tabTxt[ide]
          msg   = " indice "+ide+" elt = " + nelt
          ecrit_infos(msg) ;
          deb   = nelt
          fin   = "<"+tabTxt[lonTab-ide-1]
          trans = 0
          if (nelt.indexOf("<span onclick='tri_")>-1) { trans = 1 }
          if (nelt.indexOf("<span senstri")>-1) { trans = 1 }
          if (trans==1) {
             // on doit virre la balise d'ouverture et la partie </span> correspondante
             // dans la balise de fermeture
             deb = ""
             fin = fin.replace(/<\/span>/,"")
          } // fin si
          debTxt =       debTxt + deb
          finTxt = fin + finTxt
          msg = " ICI deb = "+deb+" et fin = "+fin + "\n"
          ecrit_infos(msg) ;
        } // fin pour ide
        newtxt = debTxt + finTxt
        
        msg = "\nAU FINAL, ON A : "+newTxt
        ecrit_infos(msg) ;
        return(false)
        
        // ----------------------------------------------
        
        tvn  = document.getElementById("ventes").className
        
        msg = "la classe du tableau ventes était " + tvn
        ecrit_infos(msg) ;
        
        tvn = tvn.replace(" triCol","")
        tvn = tvn.replace(" triLig","")
        tvn = tvn.replace(" triTab","")
        
        msg = "elle devient " + tvn
        ecrit_infos(msg) ;
        
        document.getElementById("ventes").className =tvn
        
        // cela ne suffit pas car
        //  initialisationDesTableaux()
        // ajoute les flèches, mais ne les retire pas
        
        // on passe en revue : toute la ligne numéro 1 (indice 0)
        // et toutes les colonnes numéro 1 (indice 0) des autres lignes
        
        lesTh = document.getElementById("ventes").getElementsByTagName("th")
        nbTh  = lesTh.length
        idTh  = 0
        while (idTh<nbTh) {
          elt = lesTh[idTh]
          msg = "- pour le th d'indice "+idTh
          ecrit_infos(msg) ;
          cnt =  sousArbreDom(elt,1,1)
          msg = "il y a : "+cnt
          ecrit_infos(msg) ;
          msg = " si on enlève les span de tri, il reste : "
          ecrit_infos(msg) ;
          newCnt = "?"
          msg = newCnt
          elt.innerHTML = newCnt
          idTh++
        } // fin tant que
        
        
        lesTr = document.getElementById("ventes").getElementsByTagName("tr")
        
        
        } // fin de fonction suppressionDesBoutonsDeTri
        
        // ###############################################################
        

 

 

retour gH    Retour à la page principale de   (gH)