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

jQuery Discussion :

jquery remplacer contenu dans une liste


Sujet :

jQuery

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut jquery remplacer contenu dans une liste
    Bonjour, je debute en jquery et je suis vraimment perdu. J'essaie depuis quelques heures (j'ai honte ) de faire qqch et je n'y arrive pas.

    J'ai une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ul>
      <li> <a href="page1.html"> element 1 </a> </li>
      <li> <a href="page2.html"> element 2 </a> </li>
       <ul>
        <li> <a href="souspage3.html"> element 3</a> </li>
        <li> <a href="souspage4.html"> element 4</a> </li>
       <ul> 
     </li> <a href="page5.html"> element 5 </li>
      <li> <a href="page6.html"> element 6 </li>
    </ul>
    J'aimerais bien que les elements de cette liste qui ont une sous liste $('li:has(ul)')
    n'affiche plus de lien <a href="..."> contenu </a> mais juste le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <ul>
      <li> <a href="page1.html"> element 1 </a> </li>
      <li>  element 2 </li>
       <ul>
        <li> <a href="souspage3.html"> element 3</a> </li>
        <li> <a href="souspage4.html"> element 4</a> </li>
       <ul> 
     </li> <a href="page5.html"> element 5 </li>
      <li> <a href="page6.html"> element 6 </li>
    </ul>
    J'ai beau essayer, vraimment je n'y arrive pas. Merci de me mettre sur la bonne piste, ou de m'expliquer comment vous feriez, merci

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    une idée non testée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('li:has(ul)').each( function() {
      var text = $('a', this).eq(0).text();
      $('a', this).eq(0).replaceWith(text);
    });

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    Salut Marcha,

    En fait je venais poster pour dire que j'avais trouve une solution qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     66        //Remplacer les tetes de sous-menus qui sont des liens par leur texte
     67        $('li:has(ul)').each(
     68          function (){
     69            content = $(this).find('a:first').html() ;
     70            $(this).find('a:first').after(content).remove()  ;
     71          }) ;
    Vu que j'apprends jQuery, j'ai teste ton code , et il s'avere qu'il fonctionnait du premier coup .

    Vraimment je commence kiffer jQuery, ca me fait trop penser a awk .

    Merci mille fois pour ta reponse super rapide et pertinente.

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    En mixant nos deux solutions, je me demande si on peut
    pas faire encore plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('li:has(ul) a:first').each( function() {
      $(this).replaceWith($(this).text());
    });

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 97
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par marcha Voir le message
    En mixant nos deux solutions, je me demande si on peut
    pas faire encore plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('li:has(ul) a:first').each( function() {
      $(this).replaceWith($(this).text());
    });
    Bonne idée, mais le remplacement ne se fait qu'une seule fois. En m'inspirant de ton code, pour que ca donne l'effet que j'attends, j'y arrive comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $('#crepuscule li:has(ul)').each(function(){ $(this).find('a:first').replaceWith($(this).find('a:first').text()); })
    Par souci de lisibilite et rapidite au final je ferais plutot comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     $('li:has(ul)').each(function(){ 
      elem = $(this).find('a:first') ; 
      elem.replaceWith(elem.text());
    })
    Ou encore comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $('li:has(ul)').each(function(){ 
      elem = $('a', this).eq(0) ; 
      elem.replaceWith(elem.text());
    })
    Et ma dernière découverte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $('li:has(ul)').each(function(){ 
      elem = $('a:first', this) ; 
      elem.replaceWith(elem.text());
    })
    Il y a surement encore 1000 facons de l'ecrire mais laquelle serait la plus rapide ? Vu que apparemment find() ou $() on l'air equivalent et que :first ou .eq(0) ne devraient pas faire une enorme difference ... bien que je penche pour eq(0).

    Merci de toute ton aide, je vais marquer le sujet comme resolu demain dans l'aprem. ;-)

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Ben c'est merveilleux toutes ces possibilités :-)

    Attention à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elem = $('a:first', this); // crée et/ou modifie la variable globale elem
    c'est plus prudent d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var elem = $('a:first', this); // variable locale à la fonction

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/07/2009, 15h19
  2. Contenu dans une liste déroulante
    Par franckh99 dans le forum Langage
    Réponses: 3
    Dernier message: 14/05/2009, 16h45
  3. Utilisation Des Données Contenues Dans Une Liste
    Par Sniffle dans le forum Général Python
    Réponses: 6
    Dernier message: 10/03/2009, 16h41
  4. modifier une liste contenue dans une liste
    Par harris_macken dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/03/2008, 16h52
  5. acceder à une liste contenue dans une liste
    Par CPI_en_mousse dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 12/06/2007, 08h33

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