2017-12-20 2 views
0

Dieser Code wählt den höchsten numerischen Wert zwischen den Daten-IDs und fügt einen Kalk-Hintergrund hinzu. Übrigens sind diese Zahlen Hexwerte. mein Problem ist, dass in Hex-Werten ist es die Frage der letzten 4 Werte, aber mein Code nimmt die ganzen Zeichen. Wie kann ich meinen Code nur für die letzten 4 Zeichen verwenden?Wie kann ich die letzten 4 Zeichen einer Zeichenkette mit JavaScript auswählen?

Es tut mir leid, das könnte leicht für Sie zu lösen, aber ich versuchte immer und immer wieder und konnte es nicht funktionieren.

Hex in dezimale:

dc61 = 56417

dc62 = 56418

dc63 = 56419

dc64 = 56420

maxData = $(".answers li[data-id]").get().reduce ((maxObj, crrntNode) => { 
 
    
 
    var idVal = parseInt ($(crrntNode).data("id"), 16) ; 
 

 
    if (idVal > maxObj.value) { 
 
     maxObj.value = idVal; 
 
     maxObj.node = crrntNode; 
 
    } 
 
    return maxObj; 
 
    }, 
 
    {value: 0, node: null} 
 
); 
 
$("body").append (`<p>The highest data-id value was ${maxData.value}.</p>`) 
 
$(maxData.node).css ("background", "lime");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="question-text" class="question sp-element border-radius active">What is favorite colour?</div> 
 
      <ul class="answers" id="answers"> 
 
      <li data-id="58b9890062279282090ddc61" class="answer sp-element border-radius active">Purple</li> 
 
      <li data-id="58b9890062279282090ddc63" class="answer sp-element border-radius active">Blue</li> 
 
      <li data-id="58b9890062279282090ddc64" class="answer sp-element border-radius active">Yellow</li> 
 
      <li data-id="58b9890062279282090ddc62" class="answer sp-element border-radius active">Red</li> 
 
      </ul>

+0

Ist das gewünschte Ergebnis anders als das, was diese vorherige SO Antwort liefert? https://stackoverflow.com/questions/5873810/how-can-i-get-last-characters-of-a-string-using-javascript – Magnus

Antwort

2

von substr verwenden, können Sie die letzten vier Zeichen des Daten Attribut erhalten. Anstatt also:

var idVal = parseInt($(crrntNode).data("id"), 16); 

Sie können etwas tun:

var nodeId = $(crrntNode).data("id"); 
var idVal = parseInt(nodeId.substr(nodeId.length - 4), 16); 

maxData = $(".answers li[data-id]").get().reduce ((maxObj, crrntNode) => { 
 
    var nodeId = $(crrntNode).data("id"); 
 
    var idVal = parseInt(nodeId.substr(nodeId.length - 4), 16); 
 

 
    if (idVal > maxObj.value) { 
 
     maxObj.value = idVal; 
 
     maxObj.node = crrntNode; 
 
    } 
 
    return maxObj; 
 
    }, 
 
    {value: 0, node: null} 
 
); 
 
$("body").append (`<p>The highest data-id value was ${maxData.value}.</p>`) 
 
$(maxData.node).css ("background", "lime");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="question-text" class="question sp-element border-radius active">What is favorite colour?</div> 
 
      <ul class="answers" id="answers"> 
 
      <li data-id="58b9890062279282090ddc61" class="answer sp-element border-radius active">Purple</li> 
 
      <li data-id="58b9890062279282090ddc63" class="answer sp-element border-radius active">Blue</li> 
 
      <li data-id="58b9890062279282090ddc64" class="answer sp-element border-radius active">Yellow</li> 
 
      <li data-id="58b9890062279282090ddc62" class="answer sp-element border-radius active">Red</li> 
 
      </ul>

+1

Vielen Dank ich so mein Fehler, ich werde Ihnen den grünen Knopf in 8 Minuten geben :) –

+0

Ich habe ein anderes Problem. Wenn die Daten-ID den Code änderte, wurden alte Werte ausgewählt und nicht erneut nach Daten-IDs recherchiert. Hast du eine Idee? –

1

Verwenden Sie die String.substr(startPosition, numChars) Methode:

var myString = "abcdefg"; 
 
console.log(myString.substr(-4, 4)); // Start 4 chars before end and take 4 chars

+0

Ich versuchte diesen Code vor, aber ich konnte es nicht auf meine Codierung arbeiten:/ –

+0

Aber, wie Sie sehen können, ist dies der Weg und es funktioniert. Was enthält in Ihrem Code die Zeichenfolge, für die Sie die letzten 4 Zeichen benötigen? –

+0

Vielen Dank –

1

Wenn ich verstehe Ihre Frage richtig (und ich bin nicht sicher, ob ich tun), wollen Sie nur die letzten 4 Zeichen einer bekannten Zeichenkette nehmen (um in Dezimal zu übersetzen, aber das war nicht Ihre Frage).

In Javascript möchten Sie die substring API verwenden. Um zum Beispiel die letzten 4 Stellen einer beliebigen Zeichenkette zu erhalten, können Sie dies tun:

var str = "abcdefghijklmnop"; 
var substr = str.substring(str.length-4, str.length); 

Weitere Informationen: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring

+0

Wie ist diese Antwort anders als meine? –

+1

Es ist nicht. Wir haben beide angefangen zu posten, als die Frage keine Antworten hatte, würde ich schätzen. – Eric

+0

Uh, nein. Meine Antwort wurde 4 Minuten vor deiner gepostet. –

Verwandte Themen