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 :

Retirer des span d'un tableau d'objet dynamiquement


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut Retirer des span d'un tableau d'objet dynamiquement
    Bonjour !

    Je cherche a retirer des balises span et leur contenu d'un tableau d'objet avec un code javascript

    Pour expliquer, j'ai un affichage d'un tableau que je voudrais exporter en pdf via un bouton. Ce tableau a, sur certains titres, des icone mis en span. Mais pour l'exportations des données j'aimerais retirer ces icones et donc ces span.

    Ca se présente plus ou moins comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Tableau = [
      {
        label : "titre 1",
        texte : "mon super texte"
      },
      {
        label : "<span class='icon'></span> titre 2",
        texte : "mon super texte 2"
      }
    ]
    Certains ont des icones et d'autres non donc il faudra surement faire avec une boucle et condition je suppose... :/

    Voila j'espère avoir été clair

    Bonne soirée et merci d'avance !

  2. #2
    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,
    donc il faudra surement faire avec une boucle et condition je suppose
    oui et supprimer à la lecture le <span> indésirable.

    As-tu essayé avec un simple leTexte.replace("<span class='icon'></span>","").

    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Tableau.forEach((el) => {
      console.log(el.texte.replace("<span class='icon'></span>", ""))
    });

  3. #3
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    à supposer qu'on modifie le tableau lui-même :

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var reg_no_span = /(\<span[^\>]*\>[^\<]*\<\/span\> ?)/gi;
    Tableau.forEach((el,i) => {
     Tableau[i].label = el.label.replace(reg_no_span, ''); // label
    });
    console.log( Tableau );

    (il y a certainement plus court...)

  4. #4
    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
    à supposer qu'on modifie le tableau lui-même :
    dans une boucle forEach la fonction callback peut modifier l'élément en cours de traitement, on peut donc écrire plus simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Tableau.forEach((el) => {
      el.label = el.label.replace("<span class='icon'></span>", ""));
    });
    console.log(Tableau);  // le contenu de Tableau est modifié
    Si le contenu de la balise est amené à être différent d'une icône à l'autre on peut effectivement passer par une regExp et dans ce cas j'utiliserais un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const regSpan = /<span .+span>/gi;
    Tableau.forEach((el) => [
      el.label = el.label.replace(regSpan, ""));
    });

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut
    Merci pour vos réponses !

    @NoSmoking : Alors ça marche nikel ! Super ! Sauf que j'ai 2 "span" différent dans les classes :/ Du coup, est-ce que je peux caler une condition la dedans du genre "si il y a
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <span class="icon1"></span>
    alors tu remplaces par '' sinon si il y a
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <span class="icon2"></span>
    tu remplaces aussi par '' sinon tu fais rien... J'ai réfléchi à la question mais je vois pas comment ou plutot avec quel méthode je peux repéré ces fameux span et ensuite les remplacer !

    @jreaux62 : J'ai essayé avec ta variable en regex mais malheureusement il aime pas trop... Je ne sais pas si c'est le faite que je sois sur VueJS (mais le fichier sur lequel je travail est bien un .js) en plus je suis pas super fort en regex donc compliqué pour moi de l'adapter :p

  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
    Essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const regSpan = /<span class='icon.+span>/gi;

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut
    Hello !

    Désolé pour ma réponse un peu tardive avec les fêtes de fin d'année...

    J'ai donc essayé ta solution NoSmoking mais il semblerais que cela ne marche pas pour moi ou alors je m'y suis mal pris :

    Voici le code avec la solution d'avant (juste avec une seule classe à remplacer) qui marche super bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (let k = 0; k !== s.lines.length; ++k) {
            const sl = s.lines[k]
            const sltext = sl.label.replace(<span class="glyphicon glyphicon-user"></span>', '')
            const line = [{ border: borderLine, text: sltext, fontSize: 10, color: '#505F6E', margin: [1, 3, 1, 3] }]
            body.push(line)
          }
    Mais il y a une autre classe qui m'ennui : <span class="glyphicon glyphicon-member"></span>

    J'ai donc testé avec la constante regSpan :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (let k = 0; k !== s.lines.length; ++k) {
            const sl = s.lines[k]
            const regSpan = /<span class='glyphicon.+span>/gi
            const sltext = sl.label.replace(<regSpan, '')
            const line = [{ border: borderLine, text: sltext, fontSize: 10, color: '#505F6E', margin: [1, 3, 1, 3] }]
            body.push(line)
          }
    Mais ca ne marche pas

  8. #8
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (let k=0; k!==s.lines.length; k++)
    {
    	let sl = s.lines[k];
    	let regSpan = /<span class=.+</span>/gi;
    	let sltext = sl.label.replace(regSpan, '');
    	let line = [{ border: borderLine, text: sltext, fontSize: 10, color: '#505F6E', margin: [1, 3, 1, 3] }];
    	body.push(line);
    }

  9. #9
    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
    J'ai donc essayé ta solution NoSmoking mais il semblerais que cela ne marche pas pour moi ou alors je m'y suis mal pris
    Si je teste :
    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
    const Tableau = [{
        label: "titre 1",
        texte: "mon super texte"
      },
      {
        label: "<span class='icon'></span> label 2",
        texte: "mon super texte 2"
      },
      {
        label: "titre 2",
        texte: "mon super texte"
      },
      {
        label: "<span class='glyphicon glyphicon-user'></span> label 3",
        texte: "autre super texte"
      }
    ]
    const regSpan = /<span .+span>/gi;
    Tableau.forEach((el) => {
      el.label = el.label.replace(regSpan, "");
    });
    console.log(Tableau); // le contenu de Tableau est modifié
    toutes les « élémenst span » sont supprimés, j'obtiens :
    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
    [{
        "label": "titre 1",
        "texte": "mon super texte"
      },
      {
        "label": " label 2",
        "texte": "mon super texte 2"
      },
      {
        "label": "titre 2",
        "texte": "mon super texte"
      },
      {
        "label": " label 3",
        "texte": "autre super texte"
      }
    ]
    nota : il y a des erreurs dans ton code, absence de guillemet ouvrant par exemple !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 200
    Par défaut
    C'est parfait ! Merci beaucoup jreaux62 et NoSmoking !

    Effectivement, j'avais mal copié mon code !

    Ce qui donne maintenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (let k=0; k!==s.lines.length; k++)
    {
    	let sl = s.lines[k];
    	let regSpan = /<span .+span>/gi;
    	let sltext = sl.label.replace(regSpan, '');
    	let line = [{ border: borderLine, text: sltext, fontSize: 10, color: '#505F6E', margin: [1, 3, 1, 3] }];
    	body.push(line);
    }

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

Discussions similaires

  1. changez la couleur d'un des elements d'un tableau d'objet dans un textarea
    Par salut_tout_le_monde dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/04/2017, 15h11
  2. Ajouter / retirer des valeurs dans un tableau en Java
    Par Khalfe dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 31/01/2016, 00h35
  3. copier des base a un tableau d'objet
    Par B.M.W83 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/12/2011, 15h17
  4. Réponses: 8
    Dernier message: 18/11/2008, 20h22
  5. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 18h04

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