如何在javascript中自动关闭方括号和大括号

时间:2020-11-06 19:53:11

标签: javascript

如何自动关闭方括号 [] 和自动关闭方括号 {} 。 我尝试使用@Ivan Ganchev的想法:

maintextarea.addEventListener('keyup', function (ev) {
let position = this.selectionStart;
   if (ev.keyCode == 222) { // I replaced this with 219 for open bracket and curly bracket
      let value = ev.target.value;
      ev.target.value = [value.slice(0, position), ev.key, value.slice(position)].join('');
      ev.target.selectionEnd = position;
   }
});

但是结果是这样的: {{ 要么: [[

1 个答案:

答案 0 :(得分:1)

下面是一个使用Map存储字符及其匹配的结束字符的示例,该字符允许轻松添加或自定义字符对。 Map.get()从地图中获取指定的元素,或者返回undefined,以便进行紧凑检查。

它还使用了input侦听器,而不是keyup,因为您不需要检测修饰键,并且感觉响应更快(尽管IE <9不支持)

const closeChars = new Map([
  ['{', '}'],
  ['[', ']'],
  ['(', ')']
]);
    
maintextarea=document.getElementById('maintextarea');

maintextarea.addEventListener('input', function (e) {

    const pos = e.target.selectionStart;
    const val = [...e.target.value];
    
    const char = val.slice(pos-1, pos)[0];
    const closeChar = closeChars.get(char);
    
    if (closeChar) {
      val.splice(pos, 0, closeChar);
      e.target.value = val.join('');
      e.target.selectionEnd = pos;
    }
});
<textarea id="maintextarea" name="closebrackets" rows="8" cols="50">
</textarea>