重叠不同颜色的TEXTARE以获得语法高亮...流体复制/粘贴 - 可能吗?

时间:2012-11-26 17:30:31

标签: javascript jquery html textarea syntax-highlighting

我希望能够在网页中语法高亮显示少量可编辑文本,前景色只有少量变化。 (为了论证,让我们说三个。)

我对Online Rich-Text Editors的恼人经历让我觉得在他们的松散目标中统治是不值得的。所以我有一个古怪的想法是将几个固定宽度字体<textarea>元素叠加在一起,并使它们保持同步。每个都有不同的前景色,并且通过背景透明度,您只需在某个特定图层不打印的地方留下间隙。浏览器会进行合成,一切都很好,也许。

Opera,Chrome,Firefox和Safari中的一些探索性测试让我感到惊讶,这确实有效(听起来很可怕)。但是,我想使用非常纯文本的最大原因之一是复制和粘贴是万无一失的。然而,当文本分成这样的层时,用户无法选择并以原始形式获取所有文本。

我的第一个冲动是叠加在顶层文本上,该文本同步包含来自所有图层的内容,但其颜色是透明的。再一次,它已经工作了......但不幸的是,几乎所有的浏览器都会从活跃的textarea颜色中提示插入点颜色。这意味着插入符号变得不可见,在某些浏览器中,您选择的文本也是如此。 (!)

因此,我向那些比我更了解此事的人征求见解。我可以以跨浏览器的方式挂钩这样的堆栈,以便在您进行选择时以及当用户执行“#34; copy&#34;获取合并文本?有没有人尝试过这样的东西?或者是否有&#34;这是一个可怕的想法的证明,并且你无法让它工作&#34; ?如果我可以获得关于选择何时更改的跨浏览器通知,我可以将合并的字符注入到选择内的点处选择的层中。 : - /

(哦,我们编织的网络很糟糕......)

2 个答案:

答案 0 :(得分:2)

糟糕的主意。你不想去那里。

你正试图重新发明轮子&#34;。有些项目已经解决了这个问题。他们的解决方案被广泛使用,因此在接下来的几周内您可以提出任何更成熟的解决方案。

如果您选择一个在线Rich Editor并了解如何以您希望的方式处理它,那么将显着缩短

您应该阅读Jeff Atwood's post called Don't Reinvent The Wheel, Unless You Plan on Learning More About Wheels

答案 1 :(得分:1)

使用现有解决方案会更快。请看ACE编辑器:

http://ace.ajax.org

ACE是一个用JavaScript编写的可嵌入代码编辑器。它与Sublime,Vim和TextMate等本机编辑器的功能和性能相匹配。它可以轻松嵌入任何网页和JavaScript应用程序中。 ACE是作为Cloud9 IDE的主要编辑器维护的,是Mozilla Skywriter(Bespin)项目的继承者。

具体来说,这个富文本编辑器具有显示语法突出显示和显示错误/行号等功能。