开发属于自己的在线编辑器--编辑器的核心
来源:互联网 发布:软件配置管理实施情况 编辑:程序博客网 时间:2024/06/05 03:25
上一篇讲了怎么设计界面,这篇讲核心内容
现在基本上都是iframe的编辑器,所见即所得模式的,代码模式就是textarea 文本框
1:光标的定位
firefox下面好像不会出现丢失的问题,主要是IE下面
丢失光标是编辑器需要解决的首要问题,当你选中文字,然后需要设置字体或者改变字体颜色的时候发现选中的文字丢失
在你单击设置字体按钮的时候需要记录光标位置
var rng = mz_winifr.document.selection.createRange(); 创建当前的选区
mz_textlen = rng.text.replace(/\r?\n/g, ' ').length; 选中的内容的长度
if(!mz_textlen) // 这个判断是光标没有选中内容的时候
{
rng = mz_winifr.document.body.createTextRange();
}
var s = document.selection.createRange();
s.setEndPoint('StartToStart', rng);
mz_pos = s.text.replace(/\r?\n/g, ' ').length;
if(matches3 = s.htmlText.match(/<img[^\>]*>/ig)) mz_pos += matches3.length; //当编辑器里有图片的时候会计算错误,修正长度
if(matches4 = s.htmlText.match(/<\/tr|table>/ig)) mz_pos += matches4.length; //这个也是修正计算
长度已经得到,保存在变量 mz_pos 里,现在需要写回去
var r = mz_winifr.document.body.createTextRange();
r.collapse(true); //把光标重合到起点位置
r.moveStart('character', mz_pos); // 移动到开始位置
r.moveEnd('character', mz_textlen); //选中的文本长度
r.select(); //选中内容
}
2.document.execCommand命令
各种浏览器对 document.execCommand的支持 请查看
http://www.mzrui.com/forum.php?mod=viewthread&tid=4&extra=page%3D7
我们可以使用document.execCommand 对文本进行简单的加粗,下划线,居中,居左等操作
3,浏览器的差异-换行处理
当ie下面进行回车操作时,插入的是<p> firefox是<br>,统一换成<br>
需要监听键盘事件
mz_winifr.document.documentElement.attachEvent("onkeydown",keydown); //绑定onkeydown事件
function keydown(e)
{
if(e.keyCode == 13)
{
mz_winifr.document.selection.createRange().pasteHTML('<br>');
mz_winifr.document.selection.createRange().select();
return false;
}
}
4.模式的切换
当你2个模式来回切换的时候,你会发现切换到代码模式,你在切回来的时候,发现编辑的内容全挤在一起了
需要替换掉换行和空格
定义2个函数进行相互切换
function bbcodetohtml(str) //代码模式切换到所见即所得
{
str = str.replace(/\r\n|\n|\r/ig, '<br />'); //替换换行
str = str.replace(/^[^<>]*<|>[^<>]*<|>[^<>]*$/g, function(){return arguments[0].replace(/\s/g, " ");}); //替换空格
return str;
}
function htmltobbcode(str) //所见即所得切换到代码模式
{
str = str.replace(/(\r\n|\n|\r)/ig, ''); //替换掉,不然在模式切换时会产生莫名奇妙的换行
str = str.replace(/<br[^\>]*>/ig, "\n"); //换成文本框的换行
str = str.replace(/ /ig,' '); //换成空格
return str;
}
关键也就是上面那么多了,还有问题可以跟帖,或者查看木子在线编辑器
http://www.mzrui.com/forum.php?mod=viewthread&tid=144&extra=page%3D1
第一篇:开发属于自己的在线编辑器--编辑器的界面
原文地址:http://www.mzrui.com/forum.php?mod=viewthread&tid=157&fromuid=2
- 开发属于自己的在线编辑器--编辑器的核心
- 开发属于自己的在线编辑器--编辑器的界面
- 使用 CodeMirror 打造属于自己的在线代码编辑器
- 使用 CodeMirror 打造属于自己的在线代码编辑器
- 开发一个自己的HTML在线编辑器
- 做一个属于自己的照片编辑器
- 想自己开发类似FCKeditor的在线编辑器
- [翻译]开发一个自己的HTML在线编辑器(二)
- [翻译]开发一个自己的HTML在线编辑器(一)
- 打造属于自己的可视Web HTML编辑器
- 打造属于自己的可视Web HTML编辑器
- 打造属于自己的可视Web HTML编辑器
- Linux下配置属于自己的vim编辑器
- sina的在线编辑器
- 不一样的在线编辑器
- 自己开发的web在线编辑器-ezEditor,拿出来秀一下
- 好东西分享:每个人都可以拥有一款属于自己的 jsFiddle,开源在线运行代码编辑器 Tiny-editor 为您解开闭源的限制!
- 自己的java编辑器
- Oracle 分析及动态采样
- 没什么亮点的第一篇呐…C++代码,求斐波那契(Fibonacci)数列的第n项,n可以为负数。递归算法,使用了记忆化搜索。
- 开发属于自己的在线编辑器--编辑器的界面
- jndi中在web.xml中配置的说明
- 多线程---(互斥体)
- 开发属于自己的在线编辑器--编辑器的核心
- 浙江大学2011年复试上机题 解题报告
- 2012年3月17日
- 专注于操作系统22之中断
- vc游戏--01--windows API程序框架
- Codeforces Round #112 (Div. 2) E题 位运算
- RadioWar_RFID_LiveCD_Alpha315.iso
- Python模拟Web Fetion给好友发送信息
- asp.net 页面缓存