
textarea不能作为富文本编辑器使用,高亮加粗等在textarea中都是无法实现的,除非你手写代码。
其实一开始我以为这些代码编辑器和传统的富文本编辑器是一样的,后来发现不是的。
下面先说说富文本编辑器,为了方便区分就用引用格式了:
我观察了五个不同的能高亮的在线IDE(不能高亮的就算了,那肯定是textarea)。
比如这个
还有
然后我发现:这五个web IDE中,只有一个使用了将div设置为可编辑模式的方式,其余四个都没有这么做。
为什么这些在线IDE没有和传统富文本编辑器一样?
我的看法是:
下面说说粘贴是怎么实现的。
按常理说,只有textarea,input这些,以及处于可编辑模式下的dom元素才会右键出现「粘贴」项。
然后我观察了下,发现这些IDE使用了textarea,下面的三个步骤可以证明这一点:
1) 以上面
为例,打开Chrome控制台,输入
控制台中会log出两个<textarea>,鼠标放在上面,你会发现,有一个textarea正好在你的光标位置。
2) 然后切换到Elements栏,定位到这个textarea。在编辑器中右键按下不放,你会发现在你按下右键的时候,这个textarea的z-index变为100000。
这是为了保证在鼠标右键按下,菜单弹出之前,textarea能保持focus状态,否则右键菜单中不会出现「粘贴」。而左键就不必要了,因为直接添加click事件发生时执行textarea.focus()就能保证textarea处于聚焦状态。
3) 给textarea绑定focus和blur事件可以发现,输入文字以及ctrl+V时,textarea是一直处于聚焦状态的。
所以很明显了,这个在线IDE输入代码是在一个隐藏textarea中进行的。然后就是把用户输入到textarea中的内容取出,再用正则之类的分析格式,加标签等等,貌似题主的问题不在这方面。
另外,出于安全原因,现在的浏览器只能由用户主动粘贴,javascript是没法直接访问剪切板内容的。
比较啰嗦。
