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 :

Ne pas comptabiliser les valeurs nulles


Sujet :

jQuery

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut Ne pas comptabiliser les valeurs nulles
    Bonjour à tous et merci par avance. Je voudrais additonner certaines cellules d'un tableau. La ligne contenant les cellules en question à une class=line1 et je ne récupère que quelques valeur dans cette ligne comme vous le voyez. Tout fonctionne bien sauf qu'évidemment je ne veux pas prendre en ligne de compte les cellules concernées qui sont vides et là je n'y arrive pas. Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var total_line1 =0;
    $(".line1").children().slice(2,8).each(function(){
    	alert($(this).html());
    	if($(this).html() !='NULL' ){
     
    	total_line1 +=parseFloat($(this).html());
    		}
    });
     
    alert(total_line1);

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut Pas vide et forcément un chiffre
    Bonjour et merci de votre précédente réponse mais je suis débutant et je bloque encore je veux signaler que la cellule ne doit pas être vide mais aussi qu'il s'agisse d'un nombre j'aid donc écrit !isNaN($(this)) maise cela ne marche pas. Au passage pourquoi lorsque l'on vérifie si la cellule n'est pas vide on n'a pas utilisé une des propiétés de $(this) comme value, text ou html. Je me suis posé la question aussi pour le isNaN. Merci encore par avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var total_line1 =0;
    $(".line1").children().slice(2,8).each(function(){
    			alert($(this).html());
    		if(!$(this).is(':empty') && !isNaN($(this) ){
     
    					total_line1 +=parseFloat($(this).html());
    		}
    });
    Aerosky

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var total_line1 = 0;
     
    $( ".line1" ).children().slice( 2, 8 ).each( function( i, item ){
        var n = parseFloat( $( item ).text() );
     
        if ( ! isNaN( n ) ){
            total_line1 += n;
        }
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut merci
    si je comprends bien le fait de rajouter les deux arguments l'un représente l'indice et l'autre la valeur que je peux ensuite exploiter

    Merci j'essaie de suite

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut
    Merci pour le code qui fonctionne bien. Comme on m'a dit qu'un bon développeur devait être fainéant je me suis dit que plutôt que de récrire 26 les précédentes lignes de codes il était plus pro d'essayer de faire une fonction pour mes 26 lignes. Voici donc la fonction et l'appel de la fonction.
    Ce dont je ne suis pas sûr c'est le passage des deux paramètres lors de l'appel de la fonction. $(".lineY")//représente les cellules de la ligne qui doivent être additionnés et $(".thtlineY") la cellule ou sera le total
    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
     
    function totalignes (linex,thtlinex) {
    	var total_linex = 0;
     
    	$(linex).children().slice(2,8).each (function (i,item){
    		var n = parseFloat($(item).text());
    			if( ! isNaN(n)) {
    	 			total_linex += n;
    			}
    	});
    	$(thtlinex).html(total_linex);			
     
    }
     
    for (var i=1;i<=26;i++){
    var a= ' $(".line ' + i+ ' ")' ;
    var b= ' $(".thtline' + i + ' ")';
     
    totalignes(a,b);
    }
    Merci encore pour tout

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 224
    Par défaut
    Bonjour,
    reconstruis ton code avec le paramètre passé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var a= ' $(".line ' + i+ ' ")' ;
    var b= ' $(".thtline' + i + ' ")';
    totalignes(a,b);
    devient avec i =10 par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    totalignes( ' $(".line 10 ")', ' $(".thtline10 ")');
    qui passer dans ta fonction donnera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $(' $(".line 10 ")').children().slice(2,8).each (function (i,item){
     //.. la suite
    });
    $(' $(".thtline10 ")').html(total_linex);
    ou un truc pas loin, ce qui n'a pas grand sens.

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Pourquoi changer de méthode ? La méthode each() est toujours disponible :

    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
    var temp = 0;
     
    $( "tr[class^='line']" ).each( function( k, ktem ){
        temp = 0;
     
        $( ktem ).children().slice( 2, 8 ).each( function( i, item ){
            var n = parseFloat( $( item ).text() );
     
            if ( ! isNaN( n ) ){
                temp += n;
            }
        });
     
        $( ".thtline" + k ).text( temp );
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut
    Merci à vous j''essaie ça je vous tiens au courant

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut
    Bonjour j'ai enfin digéré le code je ne connaissais pas ce type de sélecteur c'est cool ça me permet donc d'imbriquer deux each.
    A chaque ligne je prends les cellules qui m'intéressent et je fais le total par ligne.
    J'ai vérifié alors, que mes class étaient bien indiquées. celles des lignes class="linex" et celles des totaux class="thtlinex".

    J'ai cependant un décalage que je ne comprends pas puisque maintenant le code me parait clair. J'ai mis des alert() pour débugger mais je ne comprends pas ou ça cloche.

    Je vous joins mes fichiers.

    Merci encore pour le temps que vous me donnez

    Aerosky
    Fichiers attachés Fichiers attachés

  11. #11
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Vous n'avez pas d'élément 0, vous avez numéroté les "line" de 1 à n alors que k est numéroté de 0 à n.

    Il faut ajouter 1 à k (attention, les parenthèses sont indispensables) pour les "thline" :

    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
    var temp = 0;
     
    $( "tr[class^='line']" ).each( function( k, ktem ){
        temp = 0;
     
        $( ktem ).children().slice( 2, 8 ).each( function( i, item ){
            var n = parseFloat( $( item ).text() );
     
            if ( ! isNaN( n ) ){
                temp += n;
            }
        });
     
        $( ".thtline" + (k + 1) ).text( temp );
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut
    erreur de débutant
    merci si je comprends bien je peux renoter les thline en débutant aussi à 0 et enlever le 1 à k ?

  13. #13
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Oui !

    Pour être en harmonie avec les index qui vont toujours de 0 à n, lorsqu'une série d'éléments du DOM doit être numérotée, le faire de 0 à n est une bonne habitude à prendre.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 39
    Par défaut
    Bon alors grâce à vous j'ai réussi à faire les totaux pour chaque ligne et aussi le total ht, letotal ttc et le total tva.

    J'ai ensuite mis en place une liste qui permet de choisir le nbre de cvs. La rectte est donnée par défaut par 8. Je récupére cette valeur et reparcours lignes et cellules pour coefficienter chaque valeur.

    Et là je n'ai pas d'erreur mais cela ne marche pas.

    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
    function calculcvs(coeff){
     
    		coeff = coeff / 8; //on calcul le coefficent multiplicateur à partir de la recette qui est donnée par défaut pour 8
    		alert(coeff);
    		$( "tr[class^='line']" ).each( function( k, ktem ){	//je sélectionne chacune des lignes "tr"  ayant comme début de class 'line'
     
    				$(ktem).children().slice(2,8).each(function(i,item){ //au lieu d'utiliser  	$(this).html(parseInt($(this).html())*valeur) 
    															//	this représentant l'élément courant autant utiliser k et ktem
    					if (! isNaN(item)){///////
     
    					$(item).text(parseFloat($(item).text()*coeff));
    					 					 	                    // qui représentent aussi  l'élément courant  indice et valeur 
     
     
    					}////////
    				});//fin fonction et méthode each second nivea
     
    		});//fin fonction et méthode each 1 niveau
     
     
     
    }//fin fonction calcul
    Que faut il faire pour que je ne fasse plus ce genre d'erreur
    Merci

  15. #15
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function calculcvs( coeff ){
        coeff = coeff / 8;
     
        $( "tr[class^='line']" ).each( function( k, ktem ){
            $( ktem ).children().slice( 2, 8 ).each( function( i, item ){
                var n = parseFloat( $( item ).text() );
     
                if ( ! isNaN( n ) ){
                    $(item).text( n*coeff );
                }
            });
        });
    }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/03/2009, 23h52
  2. Ne pas sérializer les valeurs null !
    Par rad_hass dans le forum C#
    Réponses: 16
    Dernier message: 20/02/2009, 22h51
  3. Réponses: 18
    Dernier message: 09/12/2008, 11h40
  4. Ne pas renvoyer les valeurs NULL
    Par David78180 dans le forum SQL
    Réponses: 6
    Dernier message: 07/11/2008, 15h40
  5. [Excel] Ne pas tracer les valeurs nulles d'un graphe
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/02/2006, 20h00

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