我想动态生成基于当前一天的文本字符串。所以,例如,如果它是第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) {
            }
        }
    }

当前回答

<p>31<sup>st</sup> 2015年3月</p>

你可以使用

圣1 < sup > < / sup > 2 < sup >和< / sup > 研发3 < sup > < / sup > 4 < sup >的< / sup >

用于定位后缀

其他回答

我强烈推荐这本书,它超级简单易懂。希望有帮助?

它避免使用负整数,即小于1的数字并返回false 如果输入为0,则返回0

function numberToOrdinal(n) {

  let result;

  if(n < 0){
    return false;
  }else if(n === 0){
    result = "0";
  }else if(n > 0){

    let nToString = n.toString();
    let lastStringIndex = nToString.length-1;
    let lastStringElement = nToString[lastStringIndex];

    if( lastStringElement == "1" && n % 100 !== 11 ){
      result = nToString + "st";
    }else if( lastStringElement == "2" && n % 100 !== 12 ){
      result = nToString + "nd";
    }else if( lastStringElement == "3" && n % 100 !== 13 ){
      result = nToString + "rd";
    }else{
      result = nToString + "th";
    }

  }

  return result;
}

console.log(numberToOrdinal(-111));
console.log(numberToOrdinal(0));
console.log(numberToOrdinal(11));
console.log(numberToOrdinal(15));
console.log(numberToOrdinal(21));
console.log(numberToOrdinal(32));
console.log(numberToOrdinal(43));
console.log(numberToOrdinal(70));
console.log(numberToOrdinal(111));
console.log(numberToOrdinal(300));
console.log(numberToOrdinal(101));

输出

false
0
11th
15th
21st
32nd
43rd
70th
111th
300th
101st

我想为这个问题提供一个功能性的答案,以补充现有的答案:

const ordinalSuffix = ['st', 'nd', 'rd']
const addSuffix = n => n + (ordinalSuffix[(n - 1) % 10] || 'th')
const numberToOrdinal = n => `${n}`.match(/1\d$/) ? n + 'th' : addSuffix(n)

我们已经创建了一个特殊值的数组,重要的是要记住数组有一个从零开始的索引,因此ordinalSuffix[0]等于'st'。

我们的函数numberToOrdinal检查数字是否以十位数结尾,在这种情况下,将数字附加为'th',因为所有的数字序数都是'th'。如果数字不是teen,我们将数字传递给addSuffix,它将数字添加到序数中,这是由如果数字- 1(因为我们使用的是零为基础的索引)mod 10余数为2或更少,则从数组中取出,否则是'th'。

样例输出:

numberToOrdinal(1) // 1st
numberToOrdinal(2) // 2nd
numberToOrdinal(3) // 3rd
numberToOrdinal(4) // 4th
numberToOrdinal(5) // 5th
numberToOrdinal(6) // 6th
numberToOrdinal(7) // 7th
numberToOrdinal(8) // 8th
numberToOrdinal(9) // 9th
numberToOrdinal(10) // 10th
numberToOrdinal(11) // 11th
numberToOrdinal(12) // 12th
numberToOrdinal(13) // 13th
numberToOrdinal(14) // 14th
numberToOrdinal(101) // 101st

序数后缀的最小一行方法

function nth(n){return["st","nd","rd"][((n+90)%100-10)%10-1]||"th"}

(这是为正整数,参见下面的其他变化)

解释

从一个后缀为["st", "nd", "rd"]的数组开始。我们希望将以1,2,3结尾的整数(但不以11,12,13结尾)映射到索引0,1,2。

其他整数(包括以11、12、13结尾的整数)可以映射到任何其他整数——数组中没有找到的索引将计算为undefined。这在javascript中是错误的,使用逻辑或(||“th”),表达式将为这些整数返回“th”,这正是我们想要的。

表达式((n + 90) % 100 - 10) % 10 - 1进行映射。分解一下:

(n + 90) % 100: This expression takes the input integer − 10 mod 100, mapping 10 to 0, ... 99 to 89, 0 to 90, ..., 9 to 99. Now the integers ending in 11, 12, 13 are at the lower end (mapped to 1, 2, 3). - 10: Now 10 is mapped to −10, 19 to −1, 99 to 79, 0 to 80, ... 9 to 89. The integers ending in 11, 12, 13 are mapped to negative integers (−9, −8, −7). % 10: Now all integers ending in 1, 2, or 3 are mapped to 1, 2, 3. All other integers are mapped to something else (11, 12, 13 are still mapped to −9, −8, −7). - 1: Subtracting one gives the final mapping of 1, 2, 3 to 0, 1, 2.

验证它的工作

函数n (n){返回(“圣”、“和”、“采访”][100 - 10 ((n + 90) %) % 10:1] | |“th”} //测试1到124之间的整数 对于(var r = [], I = 1;I < 125;I ++) r.push(I + n (I)); / /输出结果 . getelementbyid(的结果)。innerHTML = r.join('<br>'); < div id = "结果" > < / div >

变化

允许负整数:

function nth(n){return["st","nd","rd"][(((n<0?-n:n)+90)%100-10)%10-1]||"th"}

函数n (n){返回(“圣”、“和”、“路”)((((n < 0 ? - n: n) + 90) % 100 - 10) % 10:1] | |“th”} //测试15到-124之间的整数 对于(var r = [], I = 15;I > -125;I——)r.push(I + n (I)); / /输出结果 . getelementbyid(的结果)。innerHTML = r.join('<br>'); < div id = "结果" > < / div >

在ES6胖箭头语法中(匿名函数):

n=>["st","nd","rd"][(((n<0?-n:n)+90)%100-10)%10-1]||"th"

我想引用链接中提供的答案

function ordinal(n) {
  var s = ["th", "st", "nd", "rd"];
  var v = n%100;
  return n + (s[(v-20)%10] || s[v] || s[0]);
}

我写了这个函数来解决这个问题:

// this is for adding the ordinal suffix, turning 1, 2 and 3 into 1st, 2nd and 3rd
Number.prototype.addSuffix=function(){
    var n=this.toString().split('.')[0];
    var lastDigits=n.substring(n.length-2);
    //add exception just for 11, 12 and 13
    if(lastDigits==='11' || lastDigits==='12' || lastDigits==='13'){
        return this+'th';
    }
    switch(n.substring(n.length-1)){
        case '1': return this+'st';
        case '2': return this+'nd';
        case '3': return this+'rd';
        default : return this+'th';
    }
};

有了这个,你可以把. addsuffix()放在任何数字上,它就会得到你想要的结果。例如:

var number=1234;
console.log(number.addSuffix());
// console will show: 1234th