找回密码
 快速注册
搜索
查看: 11|回复: 0

建议添加“选择括号”按钮

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-9-2 00:32
本帖最后由 hbghlyj 于 2022-9-2 00:38 编辑 建议添加“选择括号”按钮,选择光标位置的外一层括号
  1. <button onclick="mytextarea.setRangeBrace()">{}</button>
  2. mytextarea = document.querySelector('textarea');
  3. Object.defineProperty(mytextarea,'{',{get(){let brace=-1,i=this.selectionStart;do{switch(this.value[--i]){case '{':brace++;break;case '}':brace--;}}while(brace!=0&&i>0)return i}});
  4. Object.defineProperty(mytextarea,'}',{get(){let brace=1,i=this.selectionEnd;do{switch(this.value[i++]){case '{':brace++;break;case '}':brace--;}}while(brace!=0&&i<this.value.length)return i}});
  5. mytextarea.setRangeBrace=function(){mytextarea.setSelectionRange(this['{'],this['}']);this.focus()}
复制代码

选择括号.gif

730

主题

1万

回帖

9万

积分

积分
93613
QQ

显示全部楼层

kuing 发表于 2022-9-2 16:32
hbghlyj 发表于 2022-9-2 00:32
建议添加“选择括号”按钮,选择光标位置的外一层括号

好腻害,容我尝试理解一下代码的原理……

为便于阅读,我格式化一下:
  1. <button onclick="mytextarea.setRangeBrace()">{}</button>
  2. mytextarea = document.querySelector('textarea');
  3. Object.defineProperty(mytextarea, '{', {
  4.     get() {
  5.         let brace = -1,
  6.         i = this.selectionStart;
  7.         do {
  8.             switch (this.value[--i]) {
  9.             case '{':
  10.                 brace++;
  11.                 break;
  12.             case '}':
  13.                 brace--;
  14.             }
  15.         } while ( brace != 0 && i > 0 ) return i
  16.     }
  17. });
  18. Object.defineProperty(mytextarea, '}', {
  19.     get() {
  20.         let brace = 1,
  21.         i = this.selectionEnd;
  22.         do {
  23.             switch (this.value[i++]) {
  24.             case '{':
  25.                 brace++;
  26.                 break;
  27.             case '}':
  28.                 brace--;
  29.             }
  30.         } while ( brace != 0 && i < this . value . length ) return i
  31.     }
  32. });
  33. mytextarea.setRangeBrace = function() {
  34.     mytextarea.setSelectionRange(this['{'], this['}']);
  35.     this.focus()
  36. }
复制代码

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:20

Powered by Discuz!

× 快速回复 返回顶部 返回列表