Ich möchte dynamisch eine Textzeichenfolge basierend auf einem aktuellen Tag generieren. Wenn es beispielsweise Tag 1 ist, möchte ich, dass mein Code = "Es ist die <dynamische> 1 * <dynamische Zeichenfolge> st </ dynamische Zeichenfolge> * </ dynamische>" generiert .
Es gibt insgesamt 12 Tage, also habe ich Folgendes getan:
Ich habe eine for-Schleife eingerichtet, die die 12 Tage durchläuft.
In meinem HTML-Code habe ich meinem Element eine eindeutige ID gegeben, mit der es als Ziel ausgewählt werden soll (siehe unten):
<h1 id="dynamicTitle" class="CustomFont leftHeading shadow">On The <span></span> <em>of rest of generic text</em></h1>
Dann habe ich in meiner for-Schleife den folgenden Code:
$("#dynamicTitle span").html(i); var day = i; if (day == 1) { day = i + "st"; } else if (day == 2) { day = i + "nd" } else if (day == 3) { day = i + "rd" }
AKTUALISIEREN
Dies ist die gesamte for-Schleife wie gewünscht:
$(document).ready(function () {
for (i = 1; i <= 12; i++) {
var classy = "";
if (daysTilDate(i + 19) > 0) {
classy = "future";
$("#Day" + i).addClass(classy);
$("#mainHeading").html("");
$("#title").html("");
$("#description").html("");
} else if (daysTilDate(i + 19) < 0) {
classy = "past";
$("#Day" + i).addClass(classy);
$("#title").html("");
$("#description").html("");
$("#mainHeading").html("");
$(".cta").css('display', 'none');
$("#Day" + i + " .prizeLink").attr("href", "" + i + ".html");
} else {
classy = "current";
$("#Day" + i).addClass(classy);
$("#title").html(headings[i - 1]);
$("#description").html(descriptions[i - 1]);
$(".cta").css('display', 'block');
$("#dynamicImage").attr("src", ".." + i + ".jpg");
$("#mainHeading").html("");
$(".claimPrize").attr("href", "" + i + ".html");
$("#dynamicTitle span").html(i);
var day = i;
if (day == 1) {
day = i + "st";
} else if (day == 2) {
day = i + "nd"
} else if (day == 3) {
day = i + "rd"
} else if (day) {
}
}
}
javascript
jquery
numbers
Antonio Vasilev
quelle
quelle
if
Blocks, der weiter in der Schleife enthalten ist. Mehr CodeAntworten:
Die Regeln lauten wie folgt:
Der folgende JavaScript-Code (neu geschrieben im Juni '14) erreicht dies:
Beispielausgabe für Zahlen zwischen 0 und 115:
quelle
111
,112
und113
führen sollte"111th"
,"112th"
und die"113th"
jeweils nicht die"111st"
,"112nd"
, und"113rd"
durch die Funktion , wie sie derzeit hergestellt codiert.n=>n+(n%10==1&&n%100!=11?'st':n%10==2&&n%100!=12?'nd':n%10==3&&n%100!=13?'rd':'th')
Von Shopify
quelle
Minimaler einzeiliger Ansatz für Ordnungssuffixe
(Dies ist für positive ganze Zahlen, siehe unten für andere Variationen)
Erläuterung
Beginnen Sie mit einem Array mit den Suffixen
["st", "nd", "rd"]
. Wir möchten Ganzzahlen, die mit 1, 2, 3 enden (aber nicht mit 11, 12, 13 enden), den Indizes 0, 1, 2 zuordnen.Andere Ganzzahlen (einschließlich der mit 11, 12, 13 endenden) können auf alles andere abgebildet werden - Indizes, die nicht im Array gefunden wurden, werden ausgewertet
undefined
. Dies ist in Javascript falsch und bei Verwendung von logisch oder (|| "th"
) wird der Ausdruck"th"
für diese Ganzzahlen zurückgegeben, was genau das ist, was wir wollen.Der Ausdruck
((n + 90) % 100 - 10) % 10 - 1
führt die Zuordnung durch. Brechen sie ab:(n + 90) % 100
: Dieser Ausdruck nimmt die Eingabe-Ganzzahl - 10 mod 100 und ordnet 10 bis 0, ... 99 bis 89, 0 bis 90, ..., 9 bis 99 zu. Jetzt sind die Ganzzahlen, die mit 11, 12, 13 enden, niedriger Ende (auf 1, 2, 3 abgebildet).- 10
: Jetzt wird 10 auf –10, 19 auf –1, 99 auf 79, 0 auf 80, ... 9 auf 89 abgebildet. Die Ganzzahlen, die mit 11, 12, 13 enden, werden auf negative Ganzzahlen (–9, –8, −7).% 10
: Jetzt werden alle Ganzzahlen, die mit 1, 2 oder 3 enden, auf 1, 2, 3 abgebildet. Alle anderen Ganzzahlen werden auf etwas anderes abgebildet (11, 12, 13 werden weiterhin auf –9, –8, –7 abgebildet).- 1
: Wenn Sie eins subtrahieren, erhalten Sie die endgültige Zuordnung von 1, 2, 3 zu 0, 1, 2.Überprüfen, ob es funktioniert
Variationen
Zulassen negativer Ganzzahlen:
In der ES6-Fat-Arrow-Syntax (anonyme Funktion):
Aktualisieren
Eine noch kürzere Alternative für positive ganze Zahlen ist der Ausdruck
In diesem Beitrag finden Sie eine Erklärung.
Update 2
quelle
Sie können die lokalen Datenfunktionen der Momentbibliotheken verwenden .
Code:
quelle
Intl.PluralRules
, die Standardmethode .Ich möchte hier nur die kanonische Vorgehensweise fallen lassen, da niemand es zu wissen scheint.
Intl.PluralRules
Konstruktor (Entwurf ECMA-402)quelle
Sie haben nur 12 Tage? Ich wäre versucht, es zu einem einfachen Sucharray zu machen:
dann
oder
quelle
$("#dynamicTitle span").html(suffix[i-1]);
Durch die Zahl in ein Array aufteilen und umgekehrt wir einfach die letzten zwei Ziffern der Nummer überprüfen können mit
array[0]
undarray[1]
.Wenn eine Zahl im Teenageralter
array[1] = 1
ist, ist "th" erforderlich.quelle
quelle
n - 1
Teils ist (gibt undefiniert zurück). Scheitert auch bei Zahlen größer als 110, z. B.getSuffix(111)
gibt "st" zurück. Es löst zwar das Problem des OP, bei dem die Zahlen 1 bis 12 sind, ist jedoch keine allgemeine Lösung. :-(Ich habe diese Funktion geschrieben, um dieses Problem zu lösen:
Mit diesem können Sie einfach
.addSuffix()
eine beliebige Zahl eingeben und es wird das ergeben, was Sie wollen. Beispielsweise:quelle
number
in dieser Zeichenfolgevar lastDigits=n.substring(number.length-2);
sollte geändert werden zuthis
n
statt seinthis
, aber danke, dass du auf diesen Fehler hingewiesen hast! :)Eine alternative Version der Ordnungsfunktion könnte wie folgt sein:
Die Variablen werden expliziter benannt, verwenden die Kamelfallkonvention und sind möglicherweise schneller.
quelle
Ich habe diese einfache Funktion neulich geschrieben. Obwohl Sie für ein Datum keine größeren Zahlen benötigen, werden auch höhere Werte berücksichtigt (1013., 36021. usw.)
quelle
function ordsfx(a){return["th","st","nd","rd"][(a=~~(a<0?-a:a)%100)>10&&a<14||(a%=10)>3?0:a]}
Siehe kommentierte Version unter https://gist.github.com/furf/986113#file-annotated-js
Kurz, süß und effizient, genau wie Utility-Funktionen sein sollten. Funktioniert mit jeder vorzeichenbehafteten / vorzeichenlosen Ganzzahl / Float. (Auch wenn ich mir keine Notwendigkeit vorstellen kann, Floats zu ordinieren)
quelle
Hier ist eine weitere Option.
Beachten Sie die Ausnahme für die Teenager? Jugendliche sind so akward!
Edit: 11. und 12. vergessen
quelle
Ich wollte eine funktionale Antwort auf diese Frage geben, um die bestehende Antwort zu ergänzen:
Wir haben ein Array mit speziellen Werten erstellt. Wichtig ist, dass Arrays einen auf Null basierenden Index haben, sodass ordinalSuffix [0] gleich 'st' ist.
Unsere Funktion numberToOrdinal prüft, ob die Zahl mit einer Teen-Zahl endet. In diesem Fall wird die Zahl mit 'th' angehängt, da alle Ordnungszahlen dann 'th' sind. Für den Fall, dass die Zahl kein Teenager ist, übergeben wir die Zahl an addSuffix, das die Zahl zur Ordnungszahl hinzufügt, die dadurch bestimmt wird, ob die Zahl minus 1 (weil wir einen auf Null basierenden Index verwenden) mod 10 einen Rest von 2 hat oder weniger wird es aus dem Array genommen, sonst ist es 'th'.
Beispielausgabe:
quelle
Altes, das ich für meine Sachen gemacht habe ...
quelle
Ich kann die ausgezeichnete Date-Fns- Bibliothek nur empfehlen . Schnell, modular, unveränderlich, arbeitet mit Standarddaten.
Siehe date-fns-Dokumente: https://date-fns.org/v2.0.0-alpha.9/docs/format
quelle
Ich habe diese Funktion für höhere Zahlen und alle Testfälle geschrieben
quelle
Hier ist ein etwas anderer Ansatz (ich glaube nicht, dass die anderen Antworten dies tun). Ich bin mir nicht sicher, ob ich es liebe oder hasse, aber es funktioniert!
quelle
Dies ist für einen Liner und Liebhaber von es6
Eine andere Option für + be number wäre:
Um das Ordnungspräfix zu entfernen, verwenden Sie einfach diese:
Fühlen Sie sich frei, nach Ihren Wünschen zu ändern
quelle
Sie können die
scales::ordinal()
Funktion auch verwenden . Es ist schnell und einfach zu bedienen.quelle
Ich kann das nur empfehlen, es ist super einfach und unkompliziert zu lesen. Ich hoffe es hilft?
AUSGABE
quelle
Sie können verwenden
1<sup>st</sup> 2<sup>nd</sup> 3<sup>rd</sup> 4<sup>th</sup>
zum Positionieren des Suffixes
quelle