<div id="richTextBox" contenteditable="true"></div>在每次击键时其innerHTML 更改的内部键入时,将光标保持在正确位置的最佳方法是什么?替换innerHTML 的行为弄乱了光标位置。
我更改innerHTML 的原因是因为我添加了<span>标签。它是代码高亮程序的一部分。跨度标签允许我放置正确的颜色亮点。
我目前正在使用 StackOverflow 答案中的以下代码作为创可贴,但它有一个重大错误。如果您按Enter 键,光标会停留在旧位置,或移动到随机位置。那是因为该算法从光标开始计算了多少个字符。但它不会将 HTML 标签或换行符视为字符。并且 RichTextBox 插入<br>以进行输入。
修复思路:
window.getSelection()and的更简单的东西document.createRange(),但我无法让它发挥作用。// Credit to Liam (Stack Overflow)
// https://stackoverflow.com/a/41034697/3480193
class Cursor {
static getCurrentCursorPosition(parentElement) {
var selection = window.getSelection(),
charCount = -1,
node;
if (selection.focusNode) {
if (Cursor._isChildOf(selection.focusNode, parentElement)) {
node = selection.focusNode;
charCount = selection.focusOffset;
while (node) {
if (node === parentElement) {
break;
}
if …Run Code Online (Sandbox Code Playgroud)我开始写一本C#书,我决定把RegEx放到混音中,让枯燥的控制台练习更有趣.我想要做的是在控制台中询问用户他们的电话号码,根据RegEx进行检查,然后捕获数字,这样我就可以按照我想要的方式对其进行格式化.除了RegEx捕获部分之外,我已经完成了所有工作.如何将捕获值转换为C#变量?
也可以随意更正任何代码格式或变量命名问题.
static void askPhoneNumber()
{
String pattern = @"[(]?(\d{3})[)]?[ -.]?(\d{3})[ -.]?(\d{4})";
System.Console.WriteLine("What is your phone number?");
String phoneNumber = Console.ReadLine();
while (!Regex.IsMatch(phoneNumber, pattern))
{
Console.WriteLine("Bad Input");
phoneNumber = Console.ReadLine();
}
Match match = Regex.Match(phoneNumber, pattern);
Capture capture = match.Groups.Captures;
System.Console.WriteLine(capture[1].Value + "-" + capture[2].Value + "-" + capture[3].Value);
}
Run Code Online (Sandbox Code Playgroud)