我想动态生成基于当前一天的文本字符串。所以,例如,如果它是第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) {
}
}
}
我想为这个问题提供一个功能性的答案,以补充现有的答案:
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
我想为这个问题提供一个功能性的答案,以补充现有的答案:
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
Intl。PluralRules,标准方法。
我只是想在这里放弃做这个的规范方法,因为似乎没有人知道它。不要白费力气。
如果你想让你的代码
自我记录
易于本地化
用现代标准
-这才是正确的方法。
const english_ordinal_rules = new Intl。PluralRules("en", {type: "ordinal"});
Const后缀= {
一:“圣”,
二:“和”,
一些:“路”,
其他:“th”
};
函数序数(number/*: number */) {
Const category = english_ordinal_rules.select(number);
Const suffix =后缀[类别];
返回(数字+后缀);
} // ->字符串
const test =数组(201)
.fill ()
.map((_, index) => index - 100)
. map(顺序)
. join (" ");
console.log(测试);
Intl。PluralRules构造函数(ECMA-402草案)
统一码的六个多元类别
Code-golf
虽然我不建议用你的代码打高尔夫,杀死可读性,但我为那些高尔夫球手想出了一个(92字节):
n=>n+{e:"st",o:"nd",w:"rd",h:"th"}[new Intl.PluralRules("en",{type:"ordinal"}).select(n)[2]]