J'ai une boucle qui génère <li> avec l'attribut personnalisé filesize, maintenant je veux rechercher tout <li> avec cette classe et additionner la valeur, mais à la place, elle renvoie deux valeurs côte à côte et ne pas additionner les valeurs.

https://jsfiddle.net/y6yLL0yv/1/

var myElements = jQuery(".fileRess");
var sumoffilessize = 0;
for (var i = 0; i < myElements.length; i++) {
    var valueofthis = myElements.eq(i).attr("sizefile");
    var valuetostr = valueofthis.toString();
    var sumoffilessize = (valuetostr + sumoffilessize);
}

alert(sumoffilessize);

HTML:

<div id="fileInfo1">
    <div style="clear:both;padding:5px;" class="fileRess" sizefile="206519" id="fileres_0">
        <input size="1" type="file" class="file" name="attach[]" id="attacher" style="display:none" multiple="" value="undefined">206519 </div>
    <div style="clear:both;padding:5px;" class="fileRess" sizefile="290284" id="fileres_1">
        <input size="1" type="file" class="file" name="attach[]" id="attacher" style="display:none" multiple="" value="undefined">290284 </div>
</div>

<div id="result"></div>
0
Mac Taylor 7 mars 2016 à 08:34

3 réponses

Meilleure réponse

Essayez de convertir la chaîne que vous avez obtenue de sizefile attribute en un nombre en utilisant parseInt(numberString) avant d'en faire la somme,

var myElements = jQuery(".fileRess");
var sumoffilessize = 0;
for (var i = 0; i < myElements.length; i++) {
  sumoffilessize += parseInt(myElements.eq(i).attr("sizefile")
}

alert(sumoffilessize);

Si vous ne le convertissez pas, alors string concatenation se produira car + est commun pour la concaténation de chaînes et pour l'addition mathématique. Il fera une concaténation de chaînes lorsqu'il rencontrera un seul string operand.

DEMO

0
Rajaprabhu Aravindasamy 7 mars 2016 à 05:46

Vous avez juste besoin de remplacer

var valuetostr = valueofthis.toString();

Avec

var valuetostr = parseInt(valueofthis.toString());
0
Tushar 7 mars 2016 à 11:39

La valeur lue dans le DOM est la chaîne . Et + fonctionnera comme opérateur de concaténation de chaînes si l'un des opérandes est une chaîne.

La chaîne doit être convertie en nombre lors de la lecture à partir du DOM, puis effectuer des opérations arithmétiques dessus.

Il existe de nombreuses options pour convertir une chaîne en nombre. Voir Comment convertir une chaîne en entier en JavaScript?

var total = 0;

// Iterate over all the elements having the `fileRess` class
$('.fileRess').each(function () {
    // Get the attribute value from DOM
    // Cast to Number by using unary `+` operator
    // Add to the `total` variable
    total += +$(this).attr('sizefile');
});

$('#result').text('Total: ' + total);
#result {
  margin: 10px;
  color: green;
  font-weight: bold
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<div id="fileInfo1">
    <div style="clear:both;padding:5px;" class="fileRess" sizefile="206519" id="fileres_0">
        <input size="1" type="file" class="file" name="attach[]" id="attacher" style="display:none" multiple="" value="undefined">206519 </div>
    <div style="clear:both;padding:5px;" class="fileRess" sizefile="290284" id="fileres_1">
        <input size="1" type="file" class="file" name="attach[]" id="attacher" style="display:none" multiple="" value="undefined">290284 </div>
</div>

<div id="result"></div>
var total = 0;

// Iterate over all the elements having the `fileRess` class
$('.fileRess').each(function () {
    // Get the attribute value from DOM
    // Cast to Number by using unary `+` operator
    // Add to the `total` variable
    total += +$(this).attr('sizefile');
});
console.log(total);

Fiddle mis à jour

0
Community 23 mai 2017 à 11:50