简介
我正在创建一个自定义的所见即所得/富文本编辑器 (RTE),因为我发现的那些在简单性和自定义方面没有满足我的需求。
我看过:
- CKEditor
- TinyMCE
- 等等
情况
我有一个 Textarea 和一个 Iframe。Textarea 保存数据库中的信息。在$(window).load (function () {
Textarea 将隐藏,其内容将被复制到 Iframe 中designMode = "on";
。
NewLines
当你按下“Enter”时,除了换行符之外,一切都很好。在每个浏览器中,结果都不同:
- <p>
: Opera & IE
- <div>
: Safari & Chrome
- <br>
: Firefox
这不是一个可靠的结果,所以我决定当有人点击 Enter a 时<br>
必须放置到位。因此,当有人想要一个新的段落时,他会按 Enter 两次,然后<br>
放置两个。
因此,我使用 keyCode 13 (Enter) 构建了一个 KeyDown 事件。
在函数中,我通过以下方式阻止了默认操作:
- event.preventDefault ();
IE9+、FF、CHROME、SAFARI 和 OPERA
- event.returnValue = false;
IE8-
然后插入用于添加自定义的代码<br>
:
- pasteHTML
IE
- insertHTML
FF、CHROME、SAFARI 和 OPERA
JSFiddle
上面的两个代码都可以在 IE7/8/9、Firefox、Chrome、Opera 和 Safari 中运行,但是会出现一些奇怪的结果。要自己查看错误,我在这里创建了一个 JSFiddle:http: //jsfiddle.net/RickS/RZ4Re/
错误 参见上面的 JSFiddle
[1:对所有浏览器的影响] 在“Two”之后点击“Enter”,没有任何反应,但在“One”之后点击“Enter”,您会看到代码有效。我发现当光标放在块元素之前时,<ul>
<ol>
或者不会放置到位。
该错误不会出现在内联元素上。
期望的结果:在块元素之前放置一个。<p>
<br>
<br>
[2:对 IE7/8/9 的影响] 在“三”(列表项)后按“回车”,“四”消失。输入一些内容并再次按“Enter”。现在“五”消失了。
还有奇怪的部分:点击“一”这个词。“四”和“五”再次出现,从未被删除。期望的结果:当您创建另一个列表项时,列表下方的内容仍然可见。
搜索
我已经研究这个问题一个多星期了,但似乎无法在任何地方找到解决方案。
在 Stack Overflow 上,我认为这篇文章接近但没有解决我的问题:通过在 contenteditable 上按 Enter 来制作 <br> 而不是 <div></div>
解决方案需要在 IE9(如果可能的话,还有 7 和 8)、Firefox、Chrome、Safari 和 Opera 中跨浏览器工作。
我希望有人可以帮助我解决这个问题。
所以在前面:非常感谢你!
瑞克