0

我正在尝试创建一个简单的文本区域,它将根据文本进行扩展。我还想语法高亮括号。这一切都运作良好,但并不完美。我正在使用隐藏<pre>在背景中的内容来执行此操作,其中包含正确调整区域大小所需的所有值。隐藏的<pre>也包含我括号的所有颜色。

首先,textarea 的大小调整是颠簸的。出于某种原因,当您按 Enter 时,文本会跳起来。很容易复制。只需输入类似的内容

test
test

然后回车,你就会明白我的意思了。

其次,突出括号的问题。如果我插入一些相当大)))))))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((的东西,例如:颜色会变得一团糟。我不知道为什么。

重现错误的更疯狂的东西是

 )))))))))))))))))))((((((((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

任何帮助表示赞赏,一个问题或另一个!

这是带有代码的小提琴的链接:http: //jsfiddle.net/Axvgf/41/

提前致谢!

4

1 回答 1

1

如果括号不匹配,则不应计算深度。例如

)))(())

深度应该是,

undefined, undefined, undefined, 1, 2, 2, 1

或者

0, 0, 0, 1, 2, 2, 1

只需将不匹配的括号涂成红色,并将匹配的括号按其级别着色。


当你按下回车键时,文本会跳起来,因为你忽略了文本底部的空行。你也应该增加它的高度。

css

.defaultEm:{
  font-size:1em;
  position:absolute;
  line-height:1;
  padding:0;
  visibility:hidden
}

脚本

function getDefaultFontSize(pa){
     pa= pa || document.body;
     var who= document.createElement('span');
     who.className= 'defaultEm';
     who.appendChild(document.createTextNode('M'));
     pa.appendChild(who);
     var fs= [who.offsetWidth, who.offsetHeight];
     pa.removeChild(who);
     return fs;
}

var newHeight = $(newId + " pre").height() + getDefaultFontSize()[1]; //adding a height of line

固定高度:http: //jsfiddle.net/ACF8e/

于 2012-12-27T06:54:06.283 回答