我正在制作一个定制元素,自动定位其视觉文本表示:
class LocalDate extends HTMLTimeElement {
// Specify observed attributes so that
// attributeChangedCallback will work
static get observedAttributes() {
return ["datetime"];
}
constructor() {
// Always call super first in constructor
const self = super();
this.formatter = new Intl.DateTimeFormat(navigator.languages, {
year: "numeric",
month: "short",
day: "numeric"
});
return self;
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === "datetime") {
this.textContent = "";
const dateMiliseconds = Date.parse(newValue);
if (!Number.isNaN(dateMiliseconds)) {
const dateString = this.formatter.format(new Date(dateMiliseconds));
this.textContent = dateString;
}
}
}
}
customElements.define('local-date', LocalDate, {
extends: "time"
});
<time is="local-date" datetime="2022-01-13T07:13:00+10:00">13 Jan 2022 - Still here</time>
kicker指的是脚本标签的运行时间——如果它是在解析主体之后运行的,那么它会按预期工作。否则,该元素将显示日期字符串,而不是显示为日期
除了
元素中已经存在的文本。
JSFIDLE和StackOverflow都将脚本标记放在正文的底部,因此只能通过DataUrl看到错误:
我在Firefox和Chrome中都复制了这一点——你知道这是怎么回事吗?