【发布时间】:2021-02-03 10:15:26
【问题描述】:
在我的<div contenteditable="true"> 中,用户可以输入单词“star”,该单词会立即被星号替换。
如果用户输入全小写的“星”,则会显示:★
如果用户全部输入大写字母,则会显示:☆
我需要什么:如果用户输入的单词“star”混合了大小写字母(例如:staR、Star、STaR...),应该显示:★
我的第一个想法是使用toLowerCase(),但由于转换发生在onInput,并且只有在输入整个单词后才会转换文本,因此使用它将无法输入“STAR”,全部大写。
有什么想法吗?
我愿意接受jQuery 解决方案。
这是我的代码:
// Autofocus the div:
document.getElementById("editableDiv").focus();
// Makes the conversion possible:
String.prototype.allReplace = function(obj) {
var retStr = this;
for (var x in obj) {
retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
}
return retStr;
};
// Converts
function convert() {
var str = document.getElementById("editableDiv").innerHTML;
var white = str.allReplace({
'STAR': '☆',
'DIAMOND': '◇'
});
var black = white.allReplace({
'star': '★',
'diamond': '◆'
});
document.getElementById("editableDiv").innerHTML = black;
// Move caret to the end:
var contentEditableElement = document.getElementById("editableDiv");
var range, selection;
if (document.createRange) {
range = document.createRange();
range.selectNodeContents(contentEditableElement);
range.collapse(false);
selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
} else if (document.selection) {
range = document.body.createTextRange();
range.moveToElementText(contentEditableElement);
range.collapse(false);
range.select();
}
}
body {
padding: 10px;
font-family: sans-serif;
}
div {
padding: 5px 20px;
width: 200px;
border: solid 1px #000;
outline: 0;
line-height: 2;
font-size: 1.5em;
}
<div id="editableDiv" contenteditable spellcheck="false" oninput="convert();"></div>
【问题讨论】:
-
所以你使用的是reg exp,添加case标志
'gi'
标签: javascript uppercase case-insensitive lowercase replaceall