如何在HTML中显示特定的快捷键?

2024-04-02

在 HTML 中,您可以在表单中设置自己的快捷键:

<label accesskey="n">name</label>

但是,如何显示“n”以使用户注意到该字母是快捷方式的首选形式呢?旧的惯例是显示它下划线的,在 HTML 中应该是这样的:

<label accesskey="n"><u>n</u>ame</label>

... 但是由于<u>HTML5 中不鼓励使用标签,是否有标准(或常规)形式在 HTML 页面中显示这种快捷字符?

P.S.:我知道我可以通过类似的方式设置特定的风格<span class="mystyle">n</span>,但我要求一个更简单的解决方案 - 最好是一些特定的HTML tag.


一种选择是使用 CSS 来附加使用 CSS 的 accesskey。

[accesskey]::after {
    content: " [" attr(accesskey) "]";
}
<label accesskey="n">name</label>

我能看到的唯一其他选项(如果您不想手动突出显示 accesskey 本身)是使用 JavaScript 来包装密钥。

// This uses ES6 syntax
// [].find() - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
// NodeList.forEach() - https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach
// ChildNode.replaceWith() - https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/replaceWith

function parseHTML(htmlString) {
    return document.createRange().createContextualFragment(htmlString);
}

function findFirstTextNode(element) {

    return Array.prototype.find.call(element.childNodes, (node) => (
        node.nodeType === Node.TEXT_NODE
    ));
    
}

// Extremely basic implementation
function sprintf(string, ...args) {

    return args.reduce(
        (rendered, item) => rendered.replace("%s", item),
        string
    );

}

function highlightAccessKey(
    el,
    replaceString = "<span class=\"accesskey\">%s</span>",
    appendString = "<span class=\"accesskey\">[%s]</span>"
) {

    let accesskey = el.getAttribute("accesskey");
    let textNode = findFirstTextNode(el);

    if (textNode) {

        let text = textNode.textContent;
        let index = text.indexOf(accesskey);

        if (index > -1) {

            text = (
                text.slice(0, index)
                + sprintf(replaceString, accesskey)
                + text.slice(index + accesskey.length)
            );
            
        } else {
            text += sprintf(appendString, accesskey);
        }

        textNode.replaceWith(parseHTML(text));

    } else {
        el.appendChild(parseHTML(sprintf(appendString, accesskey)));
    }
    
}

document
    .querySelectorAll("[accesskey]")
    .forEach((el) => highlightAccessKey(el));
.accesskey {
    text-decoration: underline;
}
<label accesskey="n">name</label>

遗憾的是,没有现成的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在HTML中显示特定的快捷键? 的相关文章

随机推荐