javascript - 使用 CSS 为跨度中的第 n 个字母设置样式

标签 javascript css styling pseudo-class

我有:

<span id="string">12h12m12s</span>

并且我希望使 hms 小于文本的其余部分。我听说过 css 中的 nth-letter 伪元素,但它似乎不起作用:

#string:nth-letter(3),
#string:nth-letter(6),
#string:nth-letter(9) {
    font-size: 2em;
}

我知道我可以使用 javascript 来解析字符串并用周围的 span 标签替换字母并设置标签的样式。但是,该字符串每秒更新一次,而且似乎解析通常会占用大量资源。

最佳答案

在性能方面,我建议使用 span hell 。

<span id="string"><span id="h">12</span><span class="h">h</span><span id="m">12</span><span class="m">m</span><span id="s">12</span><span class="s">s</span></span>

每个 hms 字母一个跨度,以便您可以正确设置它们的样式(可以为它们应用相同或不同的样式每个)。

每个数字都有另一个跨度,因此您可以缓存引用。总之,这是一个非常简单的本地时钟的 JS:

//cache number container element references
var h = document.getElementById('h'),
    m = document.getElementById('m'),
    s = document.getElementById('s'),
    //IE feature detection
    textProp = h.textContent !== undefined ? 'textContent' : 'innerText';

function tick() {
    var date = new Date(),
        hours = date.getHours(),
        mins = date.getMinutes(),
        secs = date.getSeconds();
    h[textProp] = hours < 10 ? '0'+hours : hours;
    m[textProp] = mins < 10 ? '0'+mins : mins;
    s[textProp] = secs < 10 ? '0'+secs : secs;
}
tick();
setInterval(tick, 1000);

Fiddle

这说明了缓存选择器的基本思想。通过不重新创建元素,您还可以获得良好的性能提升。

不过,对于如此简单的事情来说,每秒一次并不是很繁重的工作(除非您的页面中有数百个时钟)。

关于javascript - 使用 CSS 为跨度中的第 n 个字母设置样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994270/

相关文章:

javascript - 为转换 : rotate 创建跨浏览器混合

javascript - jQuery MarginLeft 百分比

list - aVdin 8 中的样式列表选择

styling - 如何在 Skobbler 中编辑道路徽章?

javascript - 无法定位 :before Pseudo selector in JSS

javascript - Div 悬停无法正常工作

javascript - 如何在MVC中使用cryptoJs解密代码中的加密值

HTML CSS : how to draw dotted box around <div>?

javascript - 如何在与 LRS 交互时隐藏或保护身份验证凭据

javascript - 以正则表达式结尾 - Javascript