我想动态生成基于当前一天的文本字符串。所以,例如,如果它是第1天,那么我想我的代码生成=“它的<动态>1*<动态字符串>st</动态字符串>*</动态>”。

总共有12天,所以我做了以下事情:

我设置了一个for循环,循环12天。 在我的html中,我已经给了我的元素一个唯一的id来瞄准它,如下所示: <h1 id="dynamicTitle" class="CustomFont leftHeading shadow">On The <span></span> <em>of rest of generic text</em></h1> 然后,在我的for循环中,我有以下代码: $ (" # dynamicTitle跨度”). html(我); Var day = i; If (day == 1) { Day = I +“st”; } else if (day == 2) { 日= I + "nd" } else if (day == 3) { Day = I + "rd" }

更新

这是请求的整个for循环:

$(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) {
            }
        }
    }

当前回答

前几天我写了这个简单的函数。虽然对于一个日期你不需要更大的数字,但这也可以满足更高的数值(1013th, 36021等等……)

var fGetSuffix = function(nPos){

    var sSuffix = "";

    switch (nPos % 10){
        case 1:
            sSuffix = (nPos % 100 === 11) ? "th" : "st";
            break;
        case 2:
            sSuffix = (nPos % 100 === 12) ? "th" : "nd";
            break;
        case 3:
            sSuffix = (nPos % 100 === 13) ? "th" : "rd";
            break;
        default:
            sSuffix = "th";
            break;
    }

    return sSuffix;
};

其他回答

序数函数的另一个版本可以如下所示:

function toCardinal(num) {
    var ones = num % 10;
    var tens = num % 100;

    if (tens < 11 || tens > 13) {
        switch (ones) {
            case 1:
                return num + "st";
            case 2:
                return num + "nd";
            case 3:
                return num + "rd";
        }
    }

    return num + "th";
}

变量的命名更加明确,使用驼峰大小写约定,并且可能更快。

这是另一种选择。

函数getOrdinalSuffix(day) { 如果(/ ^[2 - 3]? 1美元/ test(天)){ 返回“圣”; } else if(/^[2-3]?2$/.test(day)){ 返回“和”; } else if(/^[2-3]?3$/.test(day)){ 返回“采访”; }其他{ 返回“th”; } } console.log (getOrdinalSuffix (' 1 ')); console.log (getOrdinalSuffix (13)); console.log (getOrdinalSuffix (22)); console.log (getOrdinalSuffix (33));

注意到青少年的例外了吗?青少年都很幼稚!

编辑:忘了11号和12号吧

强烈推荐优秀的date-fns库。快速,模块化,不可变,适用于标准日期。

import * as DateFns from 'date-fns';

const ordinalInt = DateFns.format(someInt, 'do');

参见date-fns docs: https://date-fns.org/v2.0.0-alpha.9/docs/format

const getOrdinalNum = (n) => n + (n > 0 ? ['th', 'st', 'nd', 'rd'][(n > 3 && n < 21) || n % 10 > 3 ? 0 : n % 10] : '');

函数ordsfx(){返回(“th”、“圣”、“和”,“路”][(= ~ ~(一个< 0 ? a: a) % 100) > 10一个< 14 | | (% = 10)> 3 ?0:]}

参见https://gist.github.com/furf/986113#file-annotated-js的注释版本

就像效用函数应该做的那样,简短、可爱、高效。适用于任何有符号/无符号整数/浮点数。(尽管我无法想象有必要对浮点数进行ordinalize)