小编Adm*_*ama的帖子

替换 <div contenteditable="true"> 的innerHTML 时修复光标位置

<div id="richTextBox" contenteditable="true"></div>在每次击键时其innerHTML 更改的内部键入时,将光标保持在正确位置的最佳方法是什么?替换innerHTML 的行为弄乱了光标位置。

我更改innerHTML 的原因是因为我添加了<span>标签。它是代码高亮程序的一部分。跨度标签允许我放置正确的颜色亮点。

我目前正在使用 StackOverflow 答案中的以下代码作为创可贴,但它有一个重大错误。如果您按Enter 键,光标会停留在旧位置,或移动到随机位置。那是因为该算法从光标开始计算了多少个字符。但它不会将 HTML 标签或换行符视为字符。并且 RichTextBox 插入<br>以进行输入。

修复思路:

  • 修复下面的代码?见小提琴
  • 替换为更简单的代码?我尝试了一堆涉及window.getSelection()and的更简单的东西document.createRange(),但我无法让它发挥作用。
  • 替换为没有此错误的 RichTextBox 库或模块?

截屏

在 JSFiddle 中呈现的 RichTextBox 的屏幕截图

// 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)

javascript richtextbox cursor

6
推荐指数
1
解决办法
708
查看次数

如何在C#中读取RegEx捕获

我开始写一本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)

c# regex console

3
推荐指数
2
解决办法
7064
查看次数

标签 统计

c# ×1

console ×1

cursor ×1

javascript ×1

regex ×1

richtextbox ×1