1. 多级需求和方案设想及其调研结果

  1. 获取搜索框输入的文本
    1. 获取元素文本
      1. ==方案==:
        1. 使用css选择器获取输入框元素
        2. 使用元素.value获得输入内容
  2. 把文本内容放在前面的path:() OR 括号内
    1. 如果没有前缀
      1. 就加上前缀
        1. 判断是否有完整前缀
          1. 判断是否残缺:
            1. 方案设想:
              1. 使用search()判断是否残缺
              2. 正则表达式:/^path:\(.*\) OR /g
            2. 如果完全没有
              1. ==方案==:
                1. 用str对象内置search方法
                  1. 正则表达式:/^path:\(.*\) OR /g
                2. 方案需求:
                  1. 正则匹配前缀
            3. 如果至少有path:
              1. 后面的每种残缺都要替换成完整前缀
                1. 方案设想:
                  1. 用replace()方法, 用正则或符号把每种残缺可能都列出来
                  2. 正则表达式:/^path:\(?\)? ?O?R?/g
              2. 如果残缺前缀括号内已经有文本, 要把这文本也替换
        2. 追加前缀
          1. ==方案==:
            1. 在输入内容前面加上前缀,再赋值给输入内容
          2. 判断前缀是否残缺
    2. 如果有前缀
      1. 把前缀后面的输入内容放进括号里面
        1. ==方案==:
          1. 用str对象内置match方法返回前缀后面的输入内容, 保存起来
            1. 用正则表达式:/(?<=\) OR ).*/g
          2. 用str对象内置replace方法把前缀括号内的东西替换为前缀后的内容
            1. 用正则表达式:/(?<=^path:\().*(?=\) OR )/g
  3. 能够等待空闲
    1. 方案设想:
      1. 先clearTimeout()
      2. 再setTimeout()
  4. 能持续输入删除后面文本的中间位置
    1. 解决每次设置文本之后,光标会自动跳到最后的问题
      1. 获取光标位置
        1. 方案设想:
          1. 使用输入框对象的selectionStart属性
      2. 控制光标位置
        1. 方案设想:
          1. 使用输入框对象的setSelectionRange()可以设置光标位置.
          2. 获取前缀后文本的长度
          3. 获取前缀括号里的文本长度
          4. 得到相差长度
          5. 光标向前移动相差的长度

2. 材料调研

2.1. 调研材料

2.1.1. 等待空闲:

如何在 JavaScript 中检测空闲时间-之路教程 (onitroad.com)

2.1.2. 控制光标位置

js控制输入框光标位置(setSelectionRange详解)_一群青红椒的博客-CSDN博客_setselectionrange

2.2. 调研材料及结论

2.2.1. serch()语法:

字符串.serch(正则表达式)//返回布尔值

2.2.2. match()语法:

字符串.match(正则表达式)//返回匹配的字符串数组

2.2.3. replace()语法:

字符串.replace(正则表达式,"用于替换的字符串")//返回替换后的字符串

input元素有一个属性, 名为selectionStart, 其保存有光标的位置

3. 随想(未整理)

3.1. 随想:

  1. 完整前缀长度11

3.2. 算法:

  1. 输入触发
    1. 获得输入内容
    2. 检测是否有完整前缀
      1. 如果有
        1. 判断是否有队列
          1. 如果没有
            1. 开始空闲等待队列, 并重置空闲计时器
              1. 获取前缀后面的内容
              2. 把前缀后面的内容替换前缀括号中的内容
      2. 如果没有
        1. 判断是否残缺
          1. 如果完全没有
            1. 在前面添加前缀
          2. 如果残缺
            1. 替换残缺内容

4. 项目结论

5.