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 :

Modifier le texte de toutes les cellules class="xyz"


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Par défaut Modifier le texte de toutes les cellules class="xyz"
    Bonjour,

    J'ai l'affichage d'un tableau dont le nom d'utilisateur est trop long,
    ex: Alexandre Dutoit (Bureau XYZ) (Ville ABC)

    J'ai un tableau du genre:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <tr>
    <td>NoInv</td>
    <td class="client">Alexandre Dutoit (Bureau XYZ) (Ville ABC)</td>
    ...
    </tr>
    <tr>
    <td>NoInv</td>
    <td class="client">France Malabrutet (Bureau 123) (Ville 098)</td>
    ...
    </tr>


    J'ai essayé un script du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var x=document.getElementsByClassName("client")
    for (i = 0; i < x.length; i++) {
        y=x[I].indexOf("(")    // Cherche la position de la première parenthèse dans le nom du client
    }
    Mais je recois un message d'erreur:
    TypeError: x[i].indexOf is not a function
    Merci d'avance,
    Jacques

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Par défaut
    Bonjour,

    indexOf() n'existe pas... enfin pas dans les HTMLElements

  3. #3
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Par défaut
    ... j'ai essayé avec slice, split.... même résultat!

    Jacques

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 125
    Par défaut
    Comme te l'as indiqué Devyan, ce sont des méthodes présentes sur les array, or un objet htmlElement n'en est pas un.
    Si tu veux accéder à ton texte tu peux utiliser l'attribut HtmlElement#innerHTML qui te permet d'obtenir le contenu de ton <td> dans une chaine de caractères.

    Sinon, comment sont générées ces entrées dans le tableau ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juillet 2012
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 196
    Par défaut
    Bonjour Kaari,

    Merci, le innerHTML fonctionne très bien!
    Mon tableau est généré par SharePoint... et mon problème est que je ne peux utiliser Designer!

    Je dois donc utiliser le javascript pour modifier les nom, car le système affiche des noms trèèèès long
    (et ça me cause des problèmes dans les affichages)

    Mon problème maintenant, c'est que je dois trouver les nom/prénom parmi beaucoup de code
    (Ahhhhh ce Microsoft!!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span class="ms-imnSpan"><a onclick="GoToLink(this);return false;" href="/sites/_layouts/userdisp.aspx?ID=99">Malbouffe André (Bureau XXX) (Ville ABC)</a></span>
    ... ça avance!!

    Merci,
    Jacques

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par MrMeteo Voir le message
    Mon tableau est généré par SharePoint... et mon problème est que je ne peux utiliser Designer!
    Si tu n'as pas acès aux sources côté serveur, tout ce que tu peux faire c'est des rustines. Les noms trèèèès longs passeront toujours dans le tuyau HTTP et seront toujours utilisés par le navigateur pour préparer le rendu visuel (qui est complexe pour un tableau, j'insiste là-dessus).

    Si c'est un problème d'affichage, pourquoi ne pas le résoudre avec la technologie la mieux adaptée aux affaires d'affichage ? Je parle de CSS
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    table { table-layout: fixed; }
    Voir : table-layout.

    Il semble que tu as un motif répétitif : (Bureau ...) (Ville ...). Tu pourrais utiliser une expression régulière pour repérer ce motif et le retirer des fragments de texte de ton DOM.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\(Bureau [^\)]+\) \(Ville [^\)]+\)/g
    Je te déconseille innerHTML dans ce cas-là car, utilisé en écriture, il fait appel à l'interpréteur HTML pour reconstruire un fragment d'arbre DOM et le réinsérer dans la page. Utiliser l'interpréteur HTML quand tu cherches juste à modifier du texte brut, c'est un peu bête. Mais ça reste la solution la plus polyvalente, je l'avoue.

    Pour raffiner un peu le traitement il faut faire des hypothèses sur la structure HTML, tout en restant le moins dépendant possible. C'est un art délicat. Par exemple, si tu supposes que tous les textes à remplacer se trouvent dans des <a>, eux-mêmes descendant indirectement de tes <td class="client">, tu peux utiliser getElementsByTagName :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var x = document.getElementsByClassName("client");
    for (var i = 0; i < x.length; i++) {
        var liens = x[i].getElementsByTagName("a");
        for (var j = 0; j < liens.length; j++) {
            if (liens[j].childNodes.length === 1 && // si le lien n'a qu'un seul descendant, il y a des chances que ce soit un nœud texte
                    liens[j].firstChild.nodeType === Node.TEXT_NODE) { // je vérifie que c'est bien un nœud texte
                var noeudTexte = liens[j].firstChild;
                noeudTexte.data = noeudTexte.data.replace(/\(Bureau [^\)]+\) \(Ville [^\)]+\)/g, "");
        }
    }
    On peut aller plus loin si on suppose que tes utilisateurs disposent d'IE9 minimum. Cette supposition, tu l'as déjà faite car tu fais appel à getElemntsByClassName. À partir d'IE9, on dispose d'une propriété « magique » qui ressemble à innerHTML mais qui traite uniquement du texte brut (l'interpréteur HTML n'est pas utilisé) : il s'agit de textContent.
    On dispose aussi de childElementCount ainsi que querySelectorAll qui simplifie énormément le travail de sélection des éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var liens = document.querySelectorAll('td.client a');
    for (var i = 0; i < liens.length; i++) {
        if (!a.childElementCount) { // je vérifie que le lien ne contient pas d'éléments HTML car,
                                    // si je modifiais textContent, ils seraient supprimés
            a.textContent = a.textContent.replace(/\(Bureau [^\)]+\) \(Ville [^\)]+\)/g, "");
        }
    }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

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

Discussions similaires

  1. [PPT-2007] Modifier la police de toutes les zones de texte d'un dipaorama
    Par filip79 dans le forum Powerpoint
    Réponses: 2
    Dernier message: 14/09/2014, 18h32
  2. [XL-2007] modifier dans une plage toutes les cellules qui contiennent un mot précis en VBA
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/10/2010, 18h24
  3. [html] Modifier du texte (sans afficher les balises)
    Par Alexino2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/07/2006, 16h43
  4. Actualiser les données de toutes les cellules d'1 colonne
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/12/2005, 10h00
  5. [VBA-E] supprimer le contenu de toutes les cellules d'une feuille
    Par BipBip2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/08/2004, 15h13

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