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 :

Compter le nombre de liens


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut Compter le nombre de liens
    Bonjour,

    Je viens d'apprendre le javascript en cours et je n'ai aucune base si ce n'est que le langage java lui même bref. Pour un td on doit compter le nombre de liens (a) contenu dans un éléments (li). Je n'ai vraiment pas d'idée sur le code. Pour compter le nombre de lien ok, mais sinon...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script type="text/javascript">
     
          function compter() {
    	  	var a = document.getElementsByTagName('a');
    		var cpt = 0;
    		for (var i=0,c = a.length; i < c; i++){
    				cpt = cpt + 1;
    		}
    		alert(cpt);
    	  }
    </script>

    Comme spécifier que les liens doivent être contenus dans des "li" ?

    Merci.

  2. #2
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     var lis = document.getElementsByTagName('li'),cpt=0;
     for(var i=0;i<lis.length;i++)
     	cpt += lis[i].getElementsByTagName('a').length;
     alert(cpt);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut
    Merci Willpower, mais si le lien est fils d'un paragraphe et que ce paragraphe est fils d'un li alors il sera comptabilisé et ce n'est pas le résultat souhaité.

    Par exemple pour ce code ça doit retourner 5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ul>
       <li> xxxx <a href=""> yyy</a> zzz </li>
       <li> xxxx <a href=""> yyy</a> zzz <a href=""> yyy</a></li>
       <li> xxxx </li>
    </ul>
    <ul>
       <li> xxxx <a href=""> yyy</a> zzz </li>
       <li> xxxx <a href=""> yyy</a> zzz <p><a href=""> yyy</a></p></li>
       <li> xxxx </li>
    </ul>

  4. #4
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Citation Envoyé par jeremux Voir le message
    Merci Willpower, mais si le lien est fils d'un paragraphe et que ce paragraphe est fils d'un li alors il sera comptabilisé et ce n'est pas le résultat souhaité.

    Par exemple pour ce code ça doit retourner 5:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ul>
       <li> xxxx <a href=""> yyy</a> zzz </li>
       <li> xxxx <a href=""> yyy</a> zzz <a href=""> yyy</a></li>
       <li> xxxx </li>
    </ul>
    <ul>
       <li> xxxx <a href=""> yyy</a> zzz </li>
       <li> xxxx <a href=""> yyy</a> zzz <p><a href=""> yyy</a></p></li>
       <li> xxxx </li>
    </ul>
    et il pourra même être comptabilisé 2 fois dans le cas des li imbriqué ! au temps pour moi, ma réponse est totalement incorrecte !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut
    pas de soucis je pense que je n'ai pas assez détaillé le problème. J'ai essayé ça mais rien de concluant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script type="text/javascript">
     
          function compter() {
    	  	var li = document.getElementsByTagName('li').childNodes;
    		var cpt = 0;
    		for (var i=0; i<li.length; i++){
    				cpt = cpt + li[i].getElementsByTagName("a").length;
    				}
    		alert(cpt);
    	  }
    </script>

  6. #6
    Membre Expert Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Par défaut
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     	var li = document.getElementsByTagName('LI'),cpt=0;
    	for(var i=0;i<li.length;i++) {
     		var child = li[i].childNodes;
     		for(var j=0;j<child.length;j++)
    			if(child[j].nodeName == 'A')
    				cpt++;
    	}
     	alert(cpt);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 22
    Par défaut
    Merci WillPower ça marche Je vais essayer de comprendre où j'ai coincé dans mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function compter() {
    	  	var a = document.getElementsByTagName('a');
    		var cpt = 0;
    		for (var i=0; i<a.length; i++){
    			if (a[i].parentNode==(document.getElementsByTagName('li'))[0]){
    				cpt = cpt + 1;
    				}
    		}
    		alert(cpt);}
    (Si quelqu'un voit l'erreur n'hésitez pas, sinon je verrais demain avec la prof)


    Merci à tous!

  8. #8
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par Willpower Voir le message
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     	var li = document.getElementsByTagName('LI'),cpt=0;
    	for(var i=0;i<li.length;i++) {
     		var child = li[i].childNodes;
     		for(var j=0;j<child.length;j++)
    			if(child[j].nodeName == 'A')
    				cpt++;
    	}
     	alert(cpt);
    En gros c'est exactement ce que j'ai dit au 2ième post...

    C'est quoi le proverbe avec le poisson et la pêche déjà ?

    Citation Envoyé par Willpower Voir le message
    ta solution ne comportant qu'une boucle est bien meilleure que la mienne.
    Citation Envoyé par NoSmoking Voir le message
    la différence est que l'on part des A et que l'on recherche le parent ultime du type choisi, plutôt que de partir du parent ultime et de récupérer ses enfants A.

    La différence ?
    le nombre d'itération, je n'est pas testé car cela va dépendre du type de document que l'on a à scruter. C'est une alternative.
    C'est en effet une solution alternative mais qui n'est pas "bien meilleure" à l'approche par les li.

    D'accord y'a pas de boucle imbriquée mais statistiquement ça fera plus d'itération (or c'est le nombre d'itération qui fait la complexité) qu'une boucle imbriquée sur les li :
    • Une page web standard contient généralement pas mal de liens
    • Une page est généralement peu chargée en li (sémantiquement, ils dénotent une liste d'élément)
    • Les élément li sont généralement des "feuilles" (il y'a rarement une arborescence importante qui en dépend)
    • Il ne s'intéresse qu'au liens directement dépendant d'un li, ce qui évite de parcourir la sous-arborescence des li


    Donc comme le dit NoSmoking, ça dépend du style de document : dans le cas d'une table des matière ce sera équivalent, dans le cas d'un listing il sera préférable de parcourir les "a", dans une page standard (avec un header, un menu, des rubriques, un footer) il sera préférable de parcourir les "li".

    Bon, je dis ça sans avoir fait d'étude préalable mais je suis persuadé que si on choisi 10000 sites au hasard et qu'on fait le ratio a vs li sur chacune de leurs pages, ça devrait corroborer ce que je dis.

    PS :
    La page actuelle contient 440 <a et 113 <li>, chaque <li> contient un seul et unique fils, ce fils est soit un <a>, soit un <span>, soit un élément texte. Soit une complexité de 113 vs 440. ^_^

  9. #9
    Invité
    Invité(e)
    Par défaut
    et avec l'objet links

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monelement.links.length;

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

Discussions similaires

  1. [SP-2010] Compter le nombre de cliques sur un lien
    Par diabli73 dans le forum SharePoint
    Réponses: 1
    Dernier message: 21/02/2013, 09h20
  2. Compter le nombre de clic sur un lien externe
    Par TommyWeb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/04/2006, 12h15
  3. compter le nombre de record
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 12/03/2003, 09h53
  4. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 20h25
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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