zoukankan      html  css  js  c++  java
  • 在线文档编辑器原理

    首先需要ie 的支持,在 ie 5.5以后就有一个编辑状态. 就是利用这个编辑状态,然后用javascript 来控制 在线编辑的. 下面给出一个简短的例子:

    首先要有一个编辑框.这个编辑框其实就是一个 可编辑状态的 网页. 我们这里用iframe 来建立编辑框

    <IFRAME id=HtmlEdit style="WIDTH: 100%; HEIGHT: 296px" marginWidth=0 marginHeight=0>
    </IFRAME>

    并且在 加上javascript 代码来指定 HtmlEdit 有编辑功能:

    function document.onreadystatechange()
    {
    HtmlEdit.document.designMode="On";
    }

    HtmlEdit.document.body.innerHTML 这句可以获得 HtmEdit 里面的html代码. 一般的我们会用这样的javascript 将 iframe 里的内容传递给一个textarea 然后提交给服务器处理.

    function getIframeData(){
    document.form1.test.value=HtmlEdit.document.body.innerHTML;
    }
    function sentIframeData(){
    HtmlEdit.document.body.innerHTML=document.form1.test.value;
    }

    var sel = HtmlEdit.document.selection.createRange(); 而这一句可以获得选取的焦点:

    下面我就演示一个完成的例子. 一个拥有加粗功能的在线编辑器,有兴趣的朋友可以在此基础上完成其他功能!!

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <script language="javascript">
    function getIframeData(){
    document.form1.test.value=HtmlEdit.document.body.innerHTML;
    }
    function sentIframeData(){
    HtmlEdit.document.body.innerHTML=document.form1.test.value;
    }
    function doB(){
    HtmlEdit.focus();
    var sel = HtmlEdit.document.selection.createRange();
    insertHTML("<b>"+sel.text+"</b>");
    }
    function insertHTML(html) {
    if (HtmlEdit.document.selection.type.toLowerCase() != "none"){
    HtmlEdit.document.selection.clear() ;
    }
    HtmlEdit.document.selection.createRange().pasteHTML(html) ;
    }
    function document.onreadystatechange()
    {
    HtmlEdit.document.designMode="On";
    }
    </script>
    </head>

    <body>
    <form action="test.asp?act=add" method="post" name="form1">

    <IFRAME id=HtmlEdit style="WIDTH: 100%; HEIGHT: 296px" marginWidth=0 marginHeight=0>
    </IFRAME>
    <textarea name="test" rows="10" id="test" style="100%;"></textarea>
    <br>
    <input type="submit" name="Submit" value="提交">
    <input type="button" value="iframe->textarea" onClick="getIframeData()">
    <input type="button" value="textarea->iframe" onClick="sentIframeData()">
    <input type="button" value="B" onClick="doB()">
    </form>
    </body>
    </html>

    html在线编辑器的调用方法---原理和实例
    [ 2005-11-20 01:17:19 | 作者: Lspcieee ]
    字体大小: 大 | 中 | 小
    来自51js.com
    收藏-2004
    HTML在线编辑器不需要懂得使用Dreamweaver,会用Word就会使用此编辑器,在文章系统或者是新闻系统需要文字编辑的web程序中非常实用。
    但是如何将html编辑器嵌入到web页中和怎么取得里面的数据呢?!
    首先我们假定我们所要调用得HTML在线编辑器放在一个单独得页面中,文件名是gledit.htm上传图片的前台页面:http://www.jfinfo.com/room/admin/img_upload.asp。
    HTML在线编辑器有两种基本调用方法
    一、使用object调用(http://www.jfinfo.com/room/admin/editor.asp):
    1、 怎么在web页中嵌入html编辑器: 我们在需要嵌入得位置加入以下html代码:<object id=doc_html data="gledit.htm" width=530 height=320 type=text/x-scriptlet VIEWASTEXT></object>
    其中object标签里面得data后面接得数据就是我们所要调用得在线编辑器页得路径,id就是我们调用object得id,后面取编辑器中得数据时就要用到这个id。Width和height就是编辑器得高度和宽度了。
    2、怎么取得html编辑器中的数据:所有需要提交的内容我们都是放在一个表单里面,同样利用object调用的编辑器也放在这个表单里面,同时我们可以设置一个隐藏的文本区域(<textarea name=d"content" style="display:none"></textarea>或<INPUT TYPE="hidden" name="content">)用以在提交的时候临时保存html在线编辑器的数据,因为在asp或者jsp,php中不能直接获取表单中的 object的内容,所以我们必须借助隐藏文本区域来获取数据。我们在表单提交的同时将object里面的内容复制到隐藏的文本区域中。详细代码如下:
    <script language="java script ">
    function CheckForm()
    {
    document.form1.content.value=document.form1.doc_html.value;
    }
    </script>
    <form method="post" action="add_news_save.asp" onsubmit="CheckForm()" name="form1">
    <object id=doc_html name= doc_html style="LEFT: 0px; TOP: 0px" data=" gledit.htm" width=530 height=320 type=text/x-scriptlet VIEWASTEXT></object>
    <input type="hidden" name="content" >
    </form>
    这样在后台处理的页面中我们就可以直接通过取隐藏区域content的数据来获取html在线编辑器的数据。
    3、怎么在文本编辑器中加入上传本机图片到html在线编辑器中:首先我们使得在点击插入图片的按钮时弹出一个上传图片的窗口,我们利用自己写的程序来实现上传本机图片到服务器上,然后我们需要记录图片的路径,然后通过html在线编辑器的值中加入显示图片的html标签。详细说明及代码如下:
    在编辑 器中我们在插入图片的按钮上加入事件 onclick="window.open('img_upload.asp','img_upload','width=481 height=190')">在'img_upload.asp'中我们将提交的图片上传到服务器制定目录然后记录图片路径
    <script language=java script >
    var src='<%="upload/"&newname%>';
    opener.form1. doc_html.value +="<img border=0 src="+src+">";
    window.close();
    </script>
    这样就实现了简单的将上传的图片插入到编辑器中。
    4、怎么在编辑修改文章的时候调用HTML在线编辑器来修改数据:当我们把在添加的时候将HTML在线编辑器来修改数据提交到数据库后我们还需要能将数据库的内容用HTML在线编辑器来修改数据。首先我们在表单中加入一个隐藏区域来放置数据库中的内容,例如<TEXTAREA style="display:none" NAME="content" ROWS="20" COLS="70"><%= rs("Content")%></TEXTAREA>,要注意这里我们用隐藏的textarea而不能用隐藏的input,因为数据里面可能包含了回车换行,所以如果我们使用<INPUT TYPE="hidden" name=content value="<%=(rs("Content")%>">很可能因为<%=(rs("Content")%>有换行而出现HTML错误(value=后面接的数据必须保证是在一行,否则出错)。然后按照前面介绍的方法使用object调用HTML在线编辑器,方法和代码同上,现在我们要做的其实就是提交时候的逆过程,我们只要将隐藏文本区域的内容复制到HTML在线编辑器就可以了,在这里我们在body里面加上<body onload="document.form1. doc_html.value=document.form1.content.value">,这样在页面装载完的时候就可以将数据库中的内容放入HTML在线编辑器中编辑了,提交过程和上面介绍的一样,在此就不赘述了。

    二、使用iframe调用(http://qxd.5599.net/by/source/article/manage/gledit.htm )
    1、 怎么在web页中嵌入:我们在需要嵌入得位置加入以下html代码:<IFRAME SRC="gledit.htm" id='content_html' style="LEFT: 0px; POSITION: absolute; TOP: 0px;z-index:0" width="100%" height="100%"></IFRAME>其中"src="后面接得数据就是我们所要调用得在线编辑器页得路径,id就是我们调用IFRAME得id,Width和height就是编辑器得高度和宽度了。
    2、怎么取得html编辑器中的数据:同样所有需要提交的内容我们都是放在一个表单里面,同时我们可以设置一个隐藏的文本区域(<textarea name="content" style="display:none"></textarea>或<INPUT TYPE="hidden" name="content">)用以在提交的时候临时保存html在线编辑器的数据,我们借助隐藏文本区域来获取数据。我们在表单提交的同时将 object里面的内容复制到隐藏的文本区域中。详细代码如下:
    function subchk(cmd)
    {
    document.form1.content.value= window.content_html.getHTML();
    }
    </SCRIPT>
    <FORM METHOD=POST ACTION="Article_add_save.gl" name="form1" onsubmit=" subchk()">
    <input type="hidden" name="content" >
    <IFRAME SRC="gledit.htm" id='content_html' style="LEFT: 0px; POSITION: absolute; TOP: 0px;z-index:0" width="100%" height="100%"></IFRAME>
    </FORM>
    在后台处理的页面中我们就可以直接通过取隐藏区域content的数据来获取html在线编辑器的数据。
    2、怎么取得html编辑器中的数据:所有需要提交的内容我们都是放在一个表单里面,同样利用object调用的编辑器也放在这个表单里面,同时我们可以设置一个隐藏的文本区域(<textarea name="content" style="display:none"></textarea>或<INPUT TYPE="hidden" name="content">)用以在提交的时候临时保存html在线编辑器的数据,因为在asp或者jsp,php中不能直接获取表单中的 object的内容,所以我们必须借助隐藏文本区域来获取数据。我们在表单提交的同时将object里面的内容复制到隐藏的文本区域中。详细代码如下:
    <script language="java script ">
    function CheckForm()
    {
    document.form1.content.value=document.form1.doc_html.value;
    }
    </script>
    <form method="post" action="add_news_save.asp" onsubmit="CheckForm()" name="form1">
    <object id=doc_html name= doc_html style="LEFT: 0px; TOP: 0px" data=" gledit.htm" width=530 height=320 type=text/x-scriptlet VIEWASTEXT></object>
    <input type="hidden" name="content" >
    </form>
    这样在后台处理的页面中我们就可以直接通过取隐藏区域content的数据来获取html在线编辑器的数据。
    3、怎么在文本编辑器中加入上传本机图片到html在线编辑器中:首先我们使得在点击插入图片的按钮时弹出一个上传图片的窗口,我们利用自己写的程序来实现上传本机图片到服务器上,然后我们需要记录图片的路径,然后通过在调用html在线编辑器的web页中写一个函数在光标的位置插入显示图片的html标签。详细说明及代码如下:
    在编辑器中我们在插入图片的按钮上加入事件 onclick="window.open('img_upload.asp','img_upload','width=481 height=190')">在调用编辑器的页面中我们定义好插入html代码到编辑器的函数
    <script language=java script >
    function insertHtml(HtmlCode)
    {
    var win=window.content_html.idEditbox.document;//其中编辑区域是gledit.htm中的一个iframe,id是idEditbox
    window.content_html.idEditbox.focus();//是编辑器获得焦点,防止代码插入在编辑器外地方
    win.selection.createRange().pasteHTML(HtmlCode)//在光标的位置插入html代码
    }
    </script>
    在处理上传图片的文件中,我们调用父窗口的函数插入html代码
    <script language=java script >
    var src='<%=" upload/"&newname%>';
    var htmlcodes;
    htmlcodes = "<img src='"+src+"' alt='<%=theForm("alt")%>' align='<%=theForm("align")%>' border='<%=theForm("border")%>' hspace='<%=theForm("hspace")%>' vspace='<%=theForm("vspace")%>'>";
    opener.insertHtml(htmlcodes)
    window.close();
    </script>
    这样就实现了简单的将上传的图片插入到编辑器中。
    4、怎么在编辑修改文章的时候调用HTML在线编辑器来修改数据:当我们把在添加的时候将HTML在线编辑器来修改数据提交到数据库后我们还需要能将数据库的内容用HTML在线编辑器来修改数据。首先我们在表单中加入一个隐藏区域来放置数据库中的内容,例如<TEXTAREA style="display:none" NAME="content" ROWS="20" COLS="70"><%= rs("Content")%></TEXTAREA>,在这里我们在调用编辑器的页面中的body标签里面加上<BODY onload="insertHtml(document.form1.content.value)">其中inserthtml()就是我们定义好插入html代码到编辑器的函数(具体参考插入图片的代码)。这样在页面装载完的时候就可以将数据库中的内容放入HTML在线编辑器中编辑了,提交过程和上面介绍的一样,在此就不赘述了

    补充:
    <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' '<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>'>
    <html xmlns='<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/xhtml</a>'>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title></title>
    <script language="javascript">
       var editor;
      
    function document.onreadystatechange(){   
    editor = document.getElementById("HtmlEdit").contentWindow;
         //只需键入以下设定,iframe立刻变成编辑器。
         //但是IE与FireFox有点不同,为了兼容FireFox,所以必须创建一个新的document。
         editor.document.open();
         editor.document.writeln("<html><head></head><body> 在线编辑器在我们日常的项目开发中非常有用(如新闻系统),它可以方便地实现文章的在线编辑,省掉了FrontPage等工具。那么是怎样实现浏览器在线编辑功能的呢? 首先需要IE的支持,在IE5.5以后就有一个编辑状态. 就是利用这个编辑状态,然后用javascript来控制在线编辑的。");

         editor.document.writeln("首先要有一个编辑框,这个编辑框其实就是一个可编辑状态的网页, 我们用iframe来建立编辑框。</body></html>");
         editor.document.close();
      
       editor.document.designMode ="On";
       editor.document.contentEditable = true;
      
       editor.focus();
       return;
       }
      
         //字体特效 - 加粗方法一
         function addBold()
         {
          editor.focus();
          //所有字体特效只是使用execComman()就能完成。
          editor.document.execCommand("Bold", false, null);
         }
        
         //字体特效 - 加粗方法二
         function addBoldII()
         {
          editor.focus();
          //获得选取的焦点
          var sel = editor.document.selection.createRange();
          insertHTML("<b>"+sel.text+"</b>");
         }
        
         function insertHTML(html)
         {
             if (editor.document.selection.type.toLowerCase() != "none")
             {
             editor.document.selection.clear() ;
             }
             editor.document.selection.createRange().pasteHTML(html) ;
         }
    </script>
    </head>

    <body>
    <h4><a href="#" onclick="return addBoldII()">选中文字加粗</a></h4>
    <IFRAME id="HtmlEdit" style="WIDTH:100%;HEIGHT:296px;"></IFRAME>
    </body>
    </html>
  • 相关阅读:
    FileUpload1上传控件
    docker如何push镜像到docker hub个人的仓库
    docker的ubuntu镜像无ifconfig和ping命令
    keystone同步数据库的时候提示error
    openstack安装dashboard后访问horizon出错 500 or 504
    装了ubuntu之后,只能进入ubuntu系统,不能进入windows系统
    Kernal Panic
    无法获得锁 /var/lib/dpkg/lock -open
    用户 'NT AUTHORITYIUSR' 登录失败
    配置错误:不能在此路径中使用此配置节。
  • 原文地址:https://www.cnblogs.com/pricks/p/1664827.html
Copyright © 2011-2022 走看看