简介
我正在创建一个自定义的Wysiwyg / Rich Text Editor(RTE),因为我找到的那些并没有满足我在简单性和自定义方面的需求。
我看过了:
- CKEditor
- TinyMCE
- 等等
情况
我有一个Textarea和一个Iframe。 Textarea保存数据库中的信息。在$(window).load (function () {
,Textarea将隐藏,其内容将被designMode = "on";
复制到iframe。
换行
当你按下'Enter'时,除了换行符之外,一切都很好。
在每个浏览器中,结果都不同:
- <p>
:Opera&amp; IE
- <div>
:Safari&amp;铬
- <br>
:Firefox
这不是一个可靠的结果所以我决定当有人点击Enter时必须放置<br>
。因此,当有人想要一个新的paragraphe时,他会两次点击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的影响]在'Three'(列表项)和'Four'之后点击'Enter'消失。输入内容并再次点击“Enter”。现在'五'消失了 而奇怪的部分:点击“一个”这个词。 “四个”和“五个”再次出现,并且从未删除。 期望的结果:当您创建另一个列表项时,列表下方的内容保持可见。
搜索
我已经调查了这个问题一个多星期了,但似乎无法在任何地方找到解决方案
关于Stack Overflow这篇文章我认为很接近,但没有解决我的问题:Make a <br> instead of <div></div> by pressing Enter on a contenteditable
解决方案需要在IE9中进行跨浏览(如果可能的话还有7和8),Firefox,Chrome,Safari和Opera。
我希望有人可以帮我解决这个问题 所以在前面:非常感谢你!
瑞克