2010-12-07 13 views
2

Ich möchte einige HTML-Elemente hinzufügen, die den gleichen Klassennamen haben.Summe mit jQuery jede Funktion

So wird der Code mit jQuery so sein.

$(".force").each(function(){ 
    a += parseInt($(this).html()); 
}); 
$("#total_forces").html(a); 

In diesem Code muss die Variable global sein.

Gibt es eine andere Möglichkeit, jeden .force Wert zu summieren und die Summe aus der each Funktion zu erhalten?

+1

Gibt es ein Problem mit der Methode, die Sie uns zeigen? –

+1

@Surreal Read, er möchte keine globale Variable verwenden. –

+0

Er sagt, dass "a" ist eine globale, aber ich hoffe, dass er klären wird, ob das das Problem ist, oder es ist eine Frage der Effizienz, falsches Ergebnis usw. –

Antwort

11

Wenn Sie eine globale Variable nicht einführen wollen, könnten Sie so etwas wie folgt verwenden:

$("#total_forces").html(function() { 
    var a = 0; 
    $(".force").each(function() { 
     a += parseInt($(this).html()); 
    }); 
    return a; 
}); 
+2

Schön. Tatsächlich akzeptiert '.html()' auch eine Funktion, so dass man nicht in '(...)()' einbinden muss. – jensgram

+0

Ah, das wusste ich nicht. Viel besser! Außerdem habe ich jetzt 4 Ersatzklammern, die ich woanders verwenden kann. –

+0

Ja, es ist wichtig, * Balance * auf diese Saugnäpfe zu halten (Ba-dum tisssss) – jensgram

0

Sie können $ (". Force"). Length verwenden, sie gibt die Anzahl der Elemente im jQuery-Objekt zurück.

jQuery API

+3

Ich denke * @Raphappa will die Summe der Werte ** in ** den .force-Elementen. –

+0

Oh ... die Frage war nicht sehr klar :) – linkyndy

2

Kurz gesagt, nein.

Warum muss a global sein? Es ist nicht global zu sein.

function aFunc() { 
    var a = 0; 

    $(".force").each(function(){ 
     a += parseInt($(this).html()); 
    }); 

    return a; 
} 

$("#total_forces").html(aFunc()); 

Which, kann vereinfacht werden:

$("#total_forces").html(function() { 
    var a = 0; 

    $(".force").each(function(){ 
     a += parseInt($(this).html()); 
    }); 

    return a; 
}); 

Hier a ist lokal für aFunc, und ist nur eine von Millionen von Beispielen nicht im globalen Bereich zu sein.

3

Wenn Sie die gleiche Funktionalität häufig benötigen, würde ich wahrscheinlich einfach ein Plugin erstellen.

Beispiel:http://jsfiddle.net/patrick_dw/2bX3U/1/

(function($) { 
    $.fn.sumHTML = function() { 
     var sum = 0; 
     this.each(function() { 
      var num = parseInt($(this).html(), 10); 
      sum += (num || 0); 
     }); 
     return sum; 
    }; 
})(jQuery); 

..., die wie folgt verwendet werden würde:

$('#total_forces').html($('.force').sumHTML()); 

EDIT: Changed Agains NaN zu schützen, wie durch @Šime Vidas zur Kenntnis genommen. Auch die Basis-10 in der parseInt() sichergestellt und eine Schließung }, die fehlte behoben.

+1

Es kann sinnvoll sein, gegen NaN zu schützen. –

+0

@ Šime Vidas - Wahr. Sollte auch Basis 10 sicherstellen. Ich werde aktualisieren. – user113716