DOM, id et position

Résolu
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 13 mars 2008 à 17:28
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 - 14 mars 2008 à 11:54
Bonzourrrrr

Je fais une petite application pour un jeu en php/mysql/js/.... et j'ai besoin d'un petit coup de pouce pour le DOM
J'ai vogué sur les flots du net pour trouver réponse à ma question mais ai trouvé seulement des éléments.
Alors voyons !

j'ai un tag "ul" dans lequel j'ai 3 "li" ce qui donne ceci

   <li id="7">mon 7emeu</li>
   <li id="12">mon 12emeu</li>
   <li id="5">mon 5emeu</li>

Maintenant passons au soucis

apres une usine a gaz, j'ai ces informations...

-l'id d'un element li par exemple 12
-l'id de l'ul père ici ul_1

Et maintenant la question qui fache

Comment puis je savoir la position du li au sein de son pere via les informations que j'ai ?
Ici cette position est egale a 1 mais comment le faire via le DOM ?
Me faut il d'autres informations pour trouver sa position?

Merci d'avance

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro

5 réponses

XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
13 mars 2008 à 17:57
Y'a peutetre plus simple mais je suis trop fatigué pour réflechir...

Voilà une proposition :

function getPosition(id_li){
        var lstLI = document.getElementById('id_de_mon_ul').getElementsByTagName('li');
        for(var i=0; i<lstLI.length; i++) if(lstLI[i].id == 'id_li') return i;
        return -1;
}

Remplace 'id_de_mon_ul' par l'identifiant de ton tag UL.
Ensuite tu peus utiliser cette fonction qui va te renvoyer la position de ton LI dans ton UL ou -1 s'il n'existe pas.
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
13 mars 2008 à 19:50
Bonjour,
<table bgcolor= "#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, ...sans avoir à boucler les fils du père pour retrouver le bon... </td>
</td></tr></tbody></table>possible mais uniquement avec IE et OPERA en utilisant la propriété sourceIndex , sinon la ou les boucles sont inéluctables.
je
te livres au passage une fonction que j'avias écrite il y a quelque
temps, une autre approche, avec bien plus de lignes de code
//----------------------------------
function Get_Index( parent_, child_){
  var O_parent = document.getElementById( parent_);


 


var O_enfant = document.getElementById( child_);



 


var Nbr = O_parent.childNodes.length;



 







//-- IE, OPERA exclusif





 


if( O_parent.sourceIndex){



 


 


return( O_enfant.sourceIndex -O_parent.sourceIndex -1);



 


}



 


else {



 


 




//-- Les autres






 


 


var k ,i;



 


 


for( i =0, k =0; i < Nbr; i++){



 


 


 


if( O_parent.childNodes[ i].nodeType == 1){



 


 


 


 


if( O_parent.childNodes[ i] == O_enfant){



 


 


 


 


 


return( k);



 


 


 


 


}



 


 


 


 


k++;



 


 


 


}



 


  






}



 


}



 


return( -1);
}



;O)
3
XtremDuke Messages postés 626 Date d'inscription samedi 28 septembre 2002 Statut Membre Dernière intervention 18 mai 2009 4
13 mars 2008 à 17:58
Oups erreur...

if(lstLI[i].id == id_li) return i; //sans les quotes
0
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
13 mars 2008 à 18:08
je voulais justement eviter cette boucle qui me semblait inutile...
En fait je croyais que si on a l'id du père et l'id du fils on aurait pu retrouver directement la position du fils dans son père sans avoir à boucler les fils du père pour retrouver le bon.
Je vais faire comme tu dis mais je restes persuadé qu'il y a une solution plus "optimisée"
Merci en tout cas

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
14 mars 2008 à 11:54
Merci beaucoup pour l'info
Mais aussi pour la fonction !
Je vais quand même la retailler un peu histoire de ne laisser apparaitre qu'un seul return et d'apporter ma pierre à l'edifice

function Get_Index( sIdParent, sIdChild){
    var oParent = document.getElementById(sIdParent);
    var oChild = document.getElementById(sIdChild);
    var iChilds = oParent.childNodes.length;
    var mReturn=-1;
    //-- IE, OPERA exclusif
    if(oParent.sourceIndex){
        mReturn=oChild.sourceIndex -oParent.sourceIndex -1;
    }
    else {
    //-- Les autres
        var iChildCurrent;
        var iNodePosition=0;
        for(iChildCurrent=0;iChildCurrent<iChilds; iChildCurrent++){
            if( oParent.childNodes[iChildCurrent].nodeType == 1){
                if(oParent.childNodes[iChildCurrent] == oChild){
                    mReturn=iNodePosition;
                    iChildCurrent=iChilds;    //on sort de la boucle proprement
                }
                iNodePosition++;
            }
        }
    }
    return mReturn;
}

Je ne peux tester pour le moment vu que je suis débordé

Bonne Continuation et Merci

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
0
Rejoignez-nous