2017-02-16 1 views
-4

Ich habe ein Schätzungstool von Drittanbietern, die konsistent Ergebnisse 30% höher als es soll, und die Firma das Update des Tools ist keine Option. Wie kann ich Javascript/jQuery DOM verwenden, um die gerenderten Zahlen anzupassen?Javascript eine Zahl um einen Prozentsatz innerhalb einer Klasse zu reduzieren

<div class="general-avg"><strong>$276,000</strong></div> 

Ich möchte die $ 276.000 als Variable erfassen und dann um 30% reduzieren. Kann mir jemand erklären, wie man das macht?

TIA

Antwort

0

Die SO-Community erwartet mindestens einen Code, mit dem Sie versucht haben, das Problem selbst zu lösen. Das ist wahrscheinlich der Grund für alle Down-Stimmen.

Aber ich werde davon ausgehen, dass JS nicht Ihre Hauptaufgabe ist und Sie nicht einmal wissen, wo ich anfangen soll, damit ich Ihnen helfen kann.

Diese Lösung benötigt keine Bibliothek, es funktioniert ohne jQuery.

// first lets get the divs by class name 
var values = document.getElementsByClassName('general-avg'); 

// then lets go through each of the divs and select strong element inside 
[].forEach.call(values, function (item) { 
    // assumption is that your 3rd party gives you always just one strong tag inside 
    var strong  = item.getElementsByTagName('strong')[0]; 
    // once we have that element selected, take the number from inside, strip $ and remove commas, parse it to float 
    var newValue  = parseFloat(strong.innerText.replace('$','').replace(',','')); 

    // once we have that, multiply by 0.7 (I sure hope that is how you deduct 30%, otherwise this is emberassing) 
    newValue = newValue * 0.7; 

    // once we have that value we just need to format it a bit, this is shameless copy paste from 
    // http://stackoverflow.com/a/10899795/3963682 
    var formatNewValue = newValue.toString().split("."); 
    newValue = formatNewValue[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") + (formatNewValue[1] ? "." + formatNewValue[1] : ""); 

    // at the end, put the number back in, and add $ sign in front 
    strong.innerText = '$' + newValue; 
}); 

Beispiel: http://codepen.io/anon/pen/xgeQjV

+0

Vielen Dank. Ich schätze es sehr. Du hast recht, JS ist nicht meine Hauptaufgabe ... meistens nur Design und einige UI-Sachen. Nochmals, danke ... das hat mir sehr geholfen. –

+0

Miroslav, wie würde ich mit diesem auf die nächste ganze Zahl runden? Ich habe versucht, strong.innerText = '$' + Math.round (Number (newValue)); in der letzten Zeile, aber das funktioniert nicht für mich. –

+0

Nevermind, ich habe es! :) hinzugefügt "newValue = Math.round (newValue);" gleich nach "newValue = newValue * 0.7;" –

0

Unten angefügt sind einige Javascript, die beim Laden der Seite ausgeführt werden und wird jeden Tag mit dem Klassennamen general-avg um 30 Prozent

var Numbers = document.getElementsByClassName("general-avg"); 
for (var i = 0; i < Numbers.length; i++) { 
    Numbers[i].innerText = "$" + Math.round(Number(Numbers[i].innerText.replace(/\D/g, '')) * 0.7).toString().replace(/(...)(.)/g, "$1,$2") 
} 

Eine Demo des Codes reduzieren gefunden werden: In der Regel HERE

+0

Pausen vollständig auf Zahlen, die nicht rundes Ergebnis erzeugen: https://jsfiddle.net/ btvLnqyt/4/ –

+0

Miroslav ich habe es behoben, so dass es auf ein ganzes n aufrundet umber: jsfiddle.net/btvLnqyt/5 –

+0

OP hat nicht angegeben, was in diesem Fall passiert, können Sie nicht einfach Finanznummern aufzurunden –

0

$('.general-avg strong').each(function() { 
 
    var $avgPrice = $(this) 
 
    var number = Number($avgPrice[0].innerHTML.replace(/[^0-9\.]+/g,"")); 
 
    
 
    // the 1000s avoid rounding issues 
 
    number = number - (number * 0.3 * 1000/1000) 
 
    
 
    $avgPrice[0].innerHTML = `$${numberWithCommas(number)}` 
 
}) 
 

 
//put the commas back in 
 
function numberWithCommas(x) { 
 
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="general-avg"><strong>$100,000</strong></div> 
 
<div class="general-avg"><strong>$276,000</strong></div>

numberWithCommas Funktion came from here.

Verwandte Themen