xhEditor是基于jQuery开发的跨平台轻量可视化XHTML编辑器,基于LGPL开源协议发布。今天就把它山寨一下。

上几张图,看看效果:

先做出菜单部分:发现是一张背景图片,所以用图片映射的方法,可以实现:

img src="xhImages/icon.png" usemap="#iconmap">
map id="iconmap" name="iconmap">
area shape="circle" coords="17,14,12" href="#" title="剪切(Ctrl+X)" id="cut" 
></area>
area shape="circle" coords="40,14,12" href="#" title="复制(Ctrl+C)" id="copy" 
></area>
area shape="circle" coords="63,14,12" href="#" title="粘贴(Ctrl+V)" id="paste"  onmouseover="hiddenDiv();"></area>
area shape="circle" coords="86,14,12" id="special"></area>
div id="specialDiv">
p style="font-size:13px;padding-left:15px;">使用键盘快捷键(Ctrl+V)把内容粘贴到方框里,按 确定</p>
textarea cols="37" rows="5" id="textAreaww"></textarea>
input type="button" onclick="charu('comfirm');" value="确定" 
>
input type="button" onclick="charu('cancel');" value="取消">
div>
  16:  
  17:  
area shape="circle" coords="112,14,12" href="javascript:parag('&lt;p>')" title="段落标签" 
area>
ul id="paraUl">
li><a href="javascript:parag('&lt;p>')"><p>普通段落</p></a></li>
li><a href="javascript:parag('&lt;h1>')"><h1>标题1<h1></a></li>
li><a href="javascript:parag('&lt;h2>')"><h2>标题2</h2></a><li>
li><a href="javascript:parag('&lt;h3>')"><h3>标题3</h3></a></li>
li><a href="javascript:parag('&lt;h4>')"><h4>标题4</h4></a></li>
li><a href="javascript:parag('&lt;h5>')"><h5>标题5</h5></a></li>
li><a href="javascript:parag('&lt;h6>')"><h6>标题6</h6></a></li>
li><a href="javascript:parag('&lt;pre>')"><pre>已编排格式</pre></a></li>
li><a href="javascript:parag('&lt;address>')"><address>地址</addresss></a></li>
ul>

对于其他的area区域用类似的方式,有了静态效果,就可以用js实现简单的交互:隐藏和显示子菜单:

1: var cut = document.getElementById("cut");

   3:     {
   4:         alert("您的浏览器安全设置不允许使用剪切操作,请使用键盘快捷键(Ctrl+X)完成");
   6:     var copy = document.getElementById("copy");
   8:     {
   9:         alert("您的浏览器安全设置不允许使用复制操作,请使用键盘快捷键(Ctrl+C)完成");
  11:     var paste = document.getElementById("paste");
  13:     {
  14:         alert("您的浏览器安全设置不允许使用粘贴操作,请使用键盘快捷键(Ctrl+V)完成");
  16:  
  17:     var special = document.getElementById("special");
  18:     var specialDiv = document.getElementById("specialDiv");
  20:     {
  21:         specialDiv.style.display = "block";
  22:         paraUl.style.display = "none";
  23:         fontUl.style.display = "none";
  24:         sizeUl.style.display="none";
  25:         fontColorDiv.style.display="none";
  26:         bgColorDiv.style.display="none";
  27:         duiqiUl.style.display = "none";
  28:         liebiaoUl.style.display = "none";
  29:         setLDiv.style.display="none";
  30:         tuDiv.style.display="none";
  31:         bqDiv.style.display="none";
  32:         bgDiv.style.display="none";
  33:         codeDiv.style.display="none";
  34:         yyDiv.style.display="none";
  35:     }

对其他的area主要是用mouseover和mouseout事件,然后就是利用execCommand命令将功能应用到

元素。ps:各浏览器对execCommand命令的支持不同,代码在FF和Chrome的新版本中调试过,其他浏览

器未调试,出现不同的结果敬请谅解。

  1. /*
  2. *第二个参数最好不要设置为TRUE,否则可能会执行不了
  3. */
  4. //加粗
  5. function jiacu()
  6. {
  7. document.execCommand("Bold",false,null);
  8. }
  9. //斜体
  10. function xieti()
  11. {
  12. document.execCommand("Italic",false,null);
  13. }
  14. //下划线
  15. function xiahua()
  16. {
  17. document.execCommand("Underline",false,null);
  18. }
  19. //删除线
  20. function shanchu()
  21. {
  22. document.execCommand("StrikeThrough",false,null);
  23. }
  24. //设置字体
  25. function setFontName(param)
  26. {
  27. document.execCommand("FontName",false,param);
  28. document.getElementById("fontUl").style.display="none";
  29. }
  30. //设置字体大小
  31. function setFontSize(param)
  32. {
  33. document.execCommand("FontSize",false,param);
  34. document.getElementById("sizeUl").style.display="none";
  35. }
  36. //设置字体颜色
  37. function setFontColor(param)
  38. {
  39. document.execCommand("ForeColor",false,param)
  40. document.getElementById("fontColor1").style.display="none";
  41. }
  42. //设置背景颜色
  43. function setBackColor(param)
  44. {
  45. document.execCommand("BackColor",false,param)
  46. document.getElementById("bgColor1").style.display="none";
  47. }
  48. //删除文字格式
  49. function removeFormat()
  50. {
  51. document.execCommand("RemoveFormat",false,null);
  52. }
  53. //对齐方式
  54. function duiqiway(param)
  55. {
  56. document.execCommand(param,false,null);
  57. document.getElementById("duiqiUl").style.display="none";
  58. }
  59. //插入列表
  60. function insertList(param)       //不能实现
  61. {
  62. document.execCommand(param,false,null);
  63. alert("暂时未实现");
  64. document.getElementById("liebiaoUl").style.display="none";
  65. }
  66. //改变缩进
  67. function changeIndent(param)    //不能实现
  68. {
  69. document.execCommand(param,false,null);
  70. alert("暂时未实现");
  71. }
  72. //链接                           //不能实现,取消链接的命令只用于用createLink命令创建的链接
  73. function setLink(param)
  74. {
  75. document.execCommand(param,false,"http://blog.csdn.net/u011043843"); //第三个参数为URL
  76. alert("暂时未实现");
  77. }
  78. //表情
  79. function insertBQ(param)
  80. {
  81. document.execCommand("InsertImage",false,param);   //param为图片的url
  82. document.getElementById("bqDiv").style.display="none";
  83. }
  84. //段落
  85. function parag(param)
  86. {
  87. document.execCommand("formatBlock",false,param);
  88. document.getElementById("paraUl").style.display="none";
  89. }

对于execCommand的用法请自行补脑。推荐一个稍官方的链接:https://developer.mozilla.org/zh-CN/docs/Web/API/document.execCommand

由于部分命令浏览器不支持,小编能力也有限,最终只实现了部分功能。不足之处,望读者谅解。

篇幅有限,只写出部分代码。如果你有需要,还请移步下载全部代码:

下载(在底部)

简易博客编辑器:玩转document.execCommand命令的更多相关文章

  1. django 简易博客开发 4 comments库使用及ajax支持

    首先还是贴一下源代码地址  https://github.com/goodspeedcheng/sblog 上一篇文章我们介绍了静态文件使用以及如何使用from实现对blog的增删改,这篇将介绍如何给 ...

  2. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  3. 简易博客[ html + css ] 练习

    1. 前言 通过使用 html + css 编写一个简易的博客作为入门练习 2. 代码及实现 2.1 目录结构 2.2 代码部分 <!DOCTYPE html> <html lang ...

  4. Nodejs+MongoDB+Bootstrap+esj搭建的个人简易博客

    github:https://github.com/yehuimmd/myNodeBloy Nodejs+MongoDB+jQuery+Bootstrap-esj搭建的个人简易博客 主要功能 前台 : ...

  5. 这是通过 Open Live Writer(是个博客编辑器) 发布的

    Open Live Writer  是开源的win10上的博客编辑器

  6. django 简易博客开发 5 markdown支持、代码高亮、gravatar头像服务

    上一篇博客介绍了comments库使用及ajax支持,现在blog已经具备了基本的功能,但是只能发表文字,不支持富文本编辑.今天我们利用markdown添加富文本支持. markdown语法说明: h ...

  7. django 简易博客开发 3 静态文件、from 应用与自定义

    首先还是贴一下源代码地址  https://github.com/goodspeedcheng/sblog 上一篇博客我们介绍了 django 如何在views中使用templates以及一些常用的数 ...

  8. django 简易博客开发 2 模板和数据查询

    首先还是贴一下项目地址  https://github.com/goodspeedcheng/sblog   因为代码全在上面 上一篇博客我们介绍了 django的安装配置,新建project,新建a ...

  9. django 简易博客开发 1 安装、创建、配置、admin使用

    首先贴一下项目地址吧  https://github.com/goodspeedcheng/sblog 到现在位置项目实现的功能有: 1.后台管理使用Admin ,前端显示使用bootstrap 2. ...

随机推荐

  1. 【莫队】bzoj 3781,bzoj 2038,bzoj 3289

    好像又有一个星期没更博客了.. 最近疯狂考试...唯一有点收获的就是学会了莫队这种神奇的算法.. 听起来很难..其实是一个很简单的东西.. 就是在区间处理问题时对于一个待求区间[L',R']通过之前求 ...

  2. 全面学习cookies

    来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(五) 本来想自己总结的,但是某文总结太好了(http://www.cnblogs.com ...

  3. EasyUI datagrid 改变url属性 实现动态加载数据

    $(function () { //说明:btnsearch按钮,selCat下拉列表,ttdatagrid table $("#btnsearch").click(functio ...

  4. PAT-乙级-1019. 数字黑洞 (20)

    1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位 ...

  5. Ehcache详细解读(转载)

    Ehcache 是现在最流行的纯Java开源缓存框架,配置简单.结构清晰.功能强大,最初知道它,是从Hibernate的缓存开始的.网上中文的EhCache材料以简单介绍和配置方法居多,如果你有这方面 ...

  6. hdu 3682

    将每个格子标记为 x*n*n+y*n+z  每个格子会有一个独特的编号  将它放入vector中  去重  我一开始用 set 超时 #include <cstdio> #include ...

  7. Unity3D开发(一):NGUI之UIRoot屏幕分辨率自适应

    原地址:http://blog.csdn.net/onerain88/article/details/11713299 NGUI在Unity3D游戏开发中非常常用,而NGUI对于每一个UI场景,都是以 ...

  8. Docker 监控实战

    如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...

  9. 1030-ACM程序设计之马拉松竞赛

    描述 校ACM协会近四个月举行了为期100天ACM程序设计之马拉松竞赛,竞赛题总数为1000,同学们反响热烈,先后有许多ACM程序设计竞赛爱好者开始先后编号,成功解答的题目数为选手的成绩. 今天进行成 ...

  10. maven 如何解决因本地jar导致的编译错误

    如何解决Maven依赖本地非repository中的jar包,依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理.http://www.mamicode.com/info-det ...