我们将如何在JavaScript / HTML中实现自动大写

时间:2020-03-06 14:28:46  来源:igfitidea点击:

我需要在用户键入ASPX页面上的Telerik RadEditor控件内部实现自动大写。

这可以是IE专用解决方案(IE6 +)。

我目前在用户键入时捕获每个击键(向下/向上),以支持称为"宏"的单独功能,这些功能本质上是简短的关键字,可以扩展为格式化的文本。即宏" so"在按空格键到" stackoverflow"时会自动扩展。

也就是说,我可以访问keyCode信息,也可以使用TextRange方法选择一个单词(" so")并将其扩展为" stackoverflow"。因此,我有一些相似之处。

但是,我需要检查此上下文以了解是否应自动进行大写。无论是否涉及宏,这也都需要工作。

由于我正在监视宏的击键动作,我应该只监视标点符号(不仅仅是标出大写字母的句点)并自动为下一个键入的字母设置大写字母,还是应该使用TextRange并分析上下文?

解决方案

我们是否尝试过将文本转换CSS样式应用于控件?

我不确定这是否是我们要尝试的操作,但这是将给定字符串转换为标题大小写的函数(引用):

function toTitleCase(str) {
    return str.replace(/([\w&`'a?a?"a?.@:\/\{\(\[<>_]+-? *)/g, function(match, p1, index, title){ // ' fix syntax highlighting
        if (index > 0 && title.charAt(index - 2) != ":" && 
            match.search(/^(a(nd?|s|t)?|b(ut|y)|en|for|i[fn]|o[fnr]|t(he|o)|vs?\.?|via)[ -]/i) > -1)
            return match.toLowerCase();
        if (title.substring(index - 1, index + 1).search(/['"_{([]/) > -1)
            return match.charAt(0) + match.charAt(1).toUpperCase() + match.substr(2);
        if (match.substr(1).search(/[A-Z]+|&|[\w]+[._][\w]+/) > -1 ||
            title.substring(index - 1, index + 1).search(/[\])}]/) > -1)
            return match;
        return match.charAt(0).toUpperCase() + match.substr(1);
    });
}

你提出了一个有趣的问题。每次按键操作都可能会受到更大的限制,因为我们将不知道在给定的键码之后会立即发生什么(撤销反应的复杂性原来是不正确的,无论如何这都意味着必须使用基于TextRange的例程)。当然,到目前为止,我还没有为这个问题编写代码,所以这是我的假设。

无论如何,这里都有一个标题框函数(受John Gruber博客自动化启发的Java实现),在处理实际的框体代码时,它可能会激发一些想法:

http://individed.com/code/to-title-case/