Я хотел бы динамически генерировать строку текста на основе текущего дня. Так, например, если это день 1, то я бы хотел, чтобы мой код генерировал = "Это <dynamic> 1 * <dynamic string> st </ dynamic string> * </ dynamic>".
Всего 12 дней, поэтому я сделал следующее:
Я установил цикл for, который проходит через 12 дней.
В моем html я дал своему элементу уникальный идентификатор, на который нужно нацелиться, см. Ниже:
<h1 id="dynamicTitle" class="CustomFont leftHeading shadow">On The <span></span> <em>of rest of generic text</em></h1>
Затем внутри цикла for у меня есть следующий код:
$("#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" }
ОБНОВИТЬ
Это весь цикл 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) {
}
}
}
javascript
jquery
numbers
Антонио Васильев
источник
источник
if
блока, который далее содержится в цикле? Показать больше кода ....Ответы:
Эти правила заключаются в следующем:
Следующий код JavaScript (переписанный в Jun '14) выполняет это:
Пример вывода для чисел от 0 до 115:
источник
111
,112
и113
должно привести"111th"
,"112th"
и ,"113th"
соответственно, не"111st"
,"112nd"
и"113rd"
производится с помощью функции , как в данный момент кодированной.n=>n+(n%10==1&&n%100!=11?'st':n%10==2&&n%100!=12?'nd':n%10==3&&n%100!=13?'rd':'th')
От Shopify
источник
Минимальный однострочный подход для порядковых суффиксов
(это для натуральных чисел, см. ниже для других вариантов)
объяснение
Начните с массива с суффиксами
["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
: Это выражение принимает входное целое число - 10 mod 100, отображая от 10 до 0, ... от 99 до 89, от 0 до 90, ..., от 9 до 99. Теперь целые числа, заканчивающиеся на 11, 12, 13, находятся ниже конец (сопоставляется с 1, 2, 3).- 10
: Теперь 10 отображается в −10, от 19 до -1, от 99 до 79, от 0 до 80, ... от 9 до 89. Целые числа, оканчивающиеся на 11, 12, 13, сопоставляются с отрицательными целыми числами (−9, −8, -7).% 10
Теперь все целые числа, оканчивающиеся на 1, 2 или 3, сопоставляются с 1, 2, 3. Все остальные целые числа сопоставляются с чем-то другим (11, 12, 13 по-прежнему сопоставляются с −9, −8, −7).- 1
: Вычитание одного дает окончательное отображение от 1, 2, 3 до 0, 1, 2.Проверка того, что это работает
вариации
Допустимые отрицательные целые числа:
В ES6 синтаксис жирной стрелки (анонимная функция):
Обновить
Еще более короткой альтернативой для натуральных чисел является выражение
Смотрите этот пост для объяснения.
Обновление 2
источник
Вы можете использовать момент библиотеки локальных данных функций .
Код:
источник
Intl.PluralRules
, То стандартный метод.Я просто хотел бы отбросить канонический способ сделать это здесь, поскольку никто, кажется, не знает этого.
Intl.PluralRules
Конструктор (Проект ECMA-402)источник
У тебя есть только 12 дней? Я бы соблазнился сделать это просто простым поисковым массивом:
затем
или
источник
$("#dynamicTitle span").html(suffix[i-1]);
Разбивая число на массив и обращая его, мы можем легко проверить последние 2 цифры числа, используя
array[0]
иarray[1]
.Если число в подростковом возрасте,
array[1] = 1
это требует "th".источник
источник
n - 1
части (возвращает неопределенное). Также не работает для чисел больше 110, например,getSuffix(111)
возвращает "st". Это решает проблему ОП, где числа от 1 до 12, но не является общим решением. :-(Я написал эту функцию, чтобы решить эту проблему:
При этом вы можете просто поставить
.addSuffix()
на любое число, и это приведет к тому, что вы хотите. Например:источник
number
в этой строкеvar lastDigits=n.substring(number.length-2);
следует изменить наthis
n
вместоthis
, но спасибо за указание на эту ошибку! :)Альтернативная версия порядковой функции может быть следующей:
Переменные названы более явно, использует соглашение о верблюдах и может быть быстрее.
источник
Я написал эту простую функцию на днях. Хотя для даты вам не нужны большие числа, это будет учитывать и более высокие значения (1013, 36021 и т. Д.)
источник
function ordsfx(a){return["th","st","nd","rd"][(a=~~(a<0?-a:a)%100)>10&&a<14||(a%=10)>3?0:a]}
См аннотированную версию на https://gist.github.com/furf/986113#file-annotated-js
Короткий, приятный и эффективный, как и должны быть полезны функции. Работает с любым знаковым / без знака целым числом / с плавающей точкой. (Даже если я не могу представить необходимость ординализации поплавков)
источник
Вот еще один вариант.
Обратите внимание на исключение для подростков? Подростки такие неловкие!
Изменить: забыл про 11 и 12
источник
Я хотел дать функциональный ответ на этот вопрос, чтобы дополнить существующий ответ:
мы создали массив специальных значений, важно помнить, что массивы имеют нулевой индекс, поэтому ordinalSuffix [0] равен 'st'.
Наша функция numberToOrdinal проверяет, заканчивается ли число на младший номер, и в этом случае добавляется число с «th», так как все порядковые номера чисел «th». В случае, если число не является подростком, мы передаем число в addSuffix, который добавляет число к порядковому номеру, определяемому, если у числа минус 1 (потому что мы используем индекс на основе нуля) мод 10 имеет остаток 2 или меньше он берется из массива, в противном случае это 'th'.
образец вывода:
источник
Старый я сделал для своих вещей ...
источник
Настоятельно рекомендуем отличную библиотеку date-fns . Быстрый, модульный, неизменный, работает со стандартными датами.
Смотрите документы date-fns: https://date-fns.org/v2.0.0-alpha.9/docs/format.
источник
Я написал эту функцию для больших чисел и всех тестовых случаев
источник
Вот немного другой подход (я не думаю, что другие ответы делают это). Я не уверен, люблю ли я это или ненавижу это, но это работает!
источник
Это для одних лайнеров и любителей эс6
Другой вариант для + be number будет:
Также, чтобы избавиться от порядкового префикса, просто используйте эти:
не стесняйтесь изменять в соответствии с вашими потребностями
источник
Вы также можете использовать
scales::ordinal()
функцию. Это быстро и просто в использовании.источник
Я настоятельно рекомендую это, это очень легко и просто читать. Надеюсь, это поможет?
ВЫВОД
источник
Ты можешь использовать
1<sup>st</sup> 2<sup>nd</sup> 3<sup>rd</sup> 4<sup>th</sup>
для позиционирования суффикса
источник