`

JavaScript Range用来开发类似于百度贴吧和webqq的编辑器

 
阅读更多
 发表于 2010-10-15 17:50:12 |只看该作者 |倒序浏览

Range,这是个很容易被人忽略的东西,在开发富文本编辑器时会经常用到。使用iframe设计模式或div的 contenteditable=“true” 。 

webqq和百度贴吧都没使用iframe制作编辑器,都用了div,是因为iframe设计模式和documen.domain冲突。contenteditable属性现在除了火狐2.0不支持,其他都可以。(使用FF2.0访问百度贴吧和webqq将无法发帖、聊天)。
关键地方时光标位置的保存,光标位置的插入html和表情,小弟研究了几天,有些收获,所以抛砖引玉献丑了。

1首先要getSelection(获取选中文字),IE是有一套自己的办法,所以要判断   -selection= (window.getSelection) ? window.getSelection() : document.selection;
2然后创建Range对象  selection.createRange ? selection.createRange() : selection.getRangeAt(0);     selection在第一步获取

光标位置插入html. IE 很简单  直接 pasteHTML(''),即可,简单方便。 但要注意,点击插入时候编辑器已经失去焦点。(后面会在失去焦点时候保存下range);
     range.collapse(false);插入后光标位于插入内容的后面

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title></title>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  </head>

  <body>

      <div id="div" contenteditable="true" style="width:300px;height:100px;border:1px solid #000"><br /></div>

      <input type="button" value="插入" onclick="test('测试一下')" onfocus="this.blur()" />

      <script type="text/javascript">

          function test(str){

              if(!document.all){

                  alert("仅在IE中可以查看");

                  return;

              }

              document.getElementById('div').focus();

              var selection= window.getSelection ? window.getSelection() : document.selection;

              var range= selection.createRange ? selection.createRange() : selection.getRangeAt(0);

              range.pasteHTML(str);

              range.collapse(false);

              range.select();

          }

      </script>

  </body>

</html>      

  提示:您可以先修改部分代码再运行


        firefox/谷歌等支持标准的浏览器在光标位置插入html,稍微麻烦些
                        

 

<html>

    <head>

        <title></title>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    </head>

    <body>

        <div id="div" contenteditable="true" style="width:300px;height:100px;border:1px solid #000"><br /></div>

        <input type="button" value="插入" onclick="test('测试一下')" onfocus="this.blur()" />

        <script type="text/javascript">

            function test(str){

                var selection= window.getSelection ? window.getSelection() : document.selection;

                var range= selection.createRange ? selection.createRange() : selection.getRangeAt(0);

                if (!window.getSelection){alert("请在支持w3c标准的浏览器查看")}

                else{

                    document.getElementById('div').focus();

                    range.collapse(false);

                    var hasR = range.createContextualFragment(str);

                    var hasR_lastChild = hasR.lastChild;

                    while (hasR_lastChild && hasR_lastChild.nodeName.toLowerCase() == "br" && hasR_lastChild.previousSibling && hasR_lastChild.previousSibling.nodeName.toLowerCase() == "br") {

                        var e = hasR_lastChild;

                        hasR_lastChild = hasR_lastChild.previousSibling;

                        hasR.removeChild(e)

                    }                                

                    range.insertNode(hasR);

                    if (hasR_lastChild) {

                        range.setEndAfter(hasR_lastChild);

                        range.setStartAfter(hasR_lastChild)

                    }

                    selection.removeAllRanges();

                    selection.addRange(range)

                }

        }

        </script>

    </body>

</html>

 

 

 

 提示:您可以先修改部分代码再运行

                   W3C标准的这个也下周再做注释

要下班了,下周继续吧。 会有编辑器要重新定义回车、获取选中的内容以替换、粘贴html图片时候过滤、保存range等。

分享到:
评论

相关推荐

    WEBQQ登陆器.rar

    总的来说,这个"WEBQQ登陆器.rar"压缩包对于想要学习WEBQQ工作原理、前端开发、网络通信或者腾讯API使用的开发者来说,是一份宝贵的资源。通过深入研究源码,不仅可以提升编程技能,还能了解实际项目中的最佳实践。

    仿WebQQ.rar

    【标题】"仿WebQQ.rar"是一个项目压缩包,它旨在模仿WebQQ的桌面系统,让用户在桌面环境下体验类似于WebQQ的交互与功能。这个项目是用纯JQuery技术实现的,这意味着它主要依赖于JQuery库来处理DOM操作、事件绑定、...

    jmos.rar_javascript_jmos win_webqq

    【标题】"jmos.rar_javascript_jmos win_webqq" 提供的是一个基于JavaScript实现的简易桌面系统,名为"jmos",它模仿了WebQQ的界面和功能,旨在为用户提供一种类似桌面应用的交互体验。 【描述】中提到,这个项目是...

    我收集的各种类似于QQ和WebQQ的源码

    我收集的各种类似于QQ和WebQQ的源码 有: VC 仿QQ即时通信程序.rar VC++ 实现类似QQ的多功能聊天程序.rar WebQQ181.rar 仿QQ完全开源的交互聊天软件.rar myicq.zip

    webQQ

    【标题】"WebQQ"揭示了我们讨论的主题是基于网页的QQ客户端实现,它允许用户在Web浏览器上体验类似于桌面版QQ的聊天功能。这种技术的实现基于Asp.net平台,利用C#编程语言编写了全部的源代码,旨在提供跨平台的即时...

    WebQQ桌面布局 WebQQ

    WebQQ桌面布局是一种基于网页技术实现的QQ客户端界面设计,它允许用户在浏览器上体验类似于桌面应用的QQ聊天功能。这种布局充分利用了Web技术的优势,如JavaScript库jQuery,来实现动态交互和响应式设计,为用户提供...

    简单项目开发实例asp.net3.5与ajax webQQ

    这个实例通过结合ASP.NET 3.5框架和AJAX技术,展示了如何构建一个类似WebQQ的聊天应用。在深入探讨这个项目之前,我们先来了解一下ASP.NET 3.5和AJAX这两个关键技术。 ASP.NET 3.5是微软.NET Framework 3.5的一部分...

    jquery-WebQQ桌面布局

    【jQuery 插件 - WebQQ 桌面布局】是一种基于 jQuery 库的前端开发工具,用于构建类似于桌面应用的WebQQ布局效果。这个插件允许开发者为网页创建具有动态和交互性的用户界面,模拟了QQ桌面客户端的用户体验,使网页...

    WebQQ_Demo WebQQ_Demo

    通过学习和分析WebQQ_Demo的源码,开发者可以深入理解Web应用的实时通信机制,以及如何将社交功能融入Web环境中,这对于提升Web开发技能和理解现代Web技术有着重要的实践意义。同时,这个项目也体现了开源精神,鼓励...

    webqq 源码 webqq仿制

    本项目主要探讨如何分析WebQQ的源码,并进行仿制开发,以创建类似的功能。 首先,我们需要了解WebQQ的核心技术。WebQQ是使用JavaScript、HTML和CSS构建的,这些是Web开发的基本技术。JavaScript负责处理动态交互,...

    Asp.Net WebQQ源代码

    【Asp.Net WebQQ源代码】是一个基于ASP.NET技术实现的在线聊天工具,它旨在模仿腾讯QQ的功能,让用户能够在网页上实现类似QQ的即时通讯体验。这个项目的核心目标是利用Web技术来提供一种轻量级的、跨平台的聊天解决...

    高仿webQQ桌面应用

    JavaScript是Web开发的核心,用于增加动态性和交互性,对于高仿WebQQ应用,它可能包含了模拟QQ功能的逻辑,如登录验证、消息发送与接收、用户状态更新等。 4. **图片资源**: - `images`文件夹:存储了应用所需的...

    js仿WebQQ整合苹果菜单界面

    在这个项目中,JavaScript被用来创建一个类似WebQQ的界面,并实现苹果菜单的功能。这涉及到DOM操作、事件处理、动画效果等多个JavaScript知识点。例如,通过DOM(文档对象模型)接口,开发者可以动态地改变HTML元素...

    WebQQ效果实现例子

    WebQQ是一种基于网页技术实现的在线聊天应用,它允许用户在浏览器中体验类似于桌面QQ的交互功能。这个“WebQQ效果实现例子”很显然是一个示例项目,旨在展示如何在Web环境中模拟桌面QQ的酷炫效果,如桌面拖拽、桌面...

    jQuery UI仿webqq桌面系统WebOS界面操作

    在本项目中,“jQuery UI仿webqq桌面系统WebOS界面操作”是一个利用jQuery UI库创建的,模拟WebQQ桌面系统风格的Web操作系统界面。这个系统旨在提供一种类似于桌面环境的用户体验,用户可以通过浏览器进行交互,享受...

    webQQ.rar_webqq

    【标题】"webQQ.rar_webqq" 涉及的核心技术是WebQQ的实现,这是一种基于Web技术的QQ客户端,允许用户在网页中直接使用QQ服务,无需下载和安装传统桌面版的QQ软件。WebQQ的出现使得即时通讯更加便捷,尤其对于那些...

    仿webQQ源码 .net ajax XML jQ

    【标题】"仿webQQ源码 .net ajax XML jQ" 涉及的主要知识点包括:WebQQ的实现原理、.NET框架的应用、Ajax技术、XML数据处理以及jQuery库的使用。...同时,对于.NET框架的深入运用,也有助于提高后端开发能力。

    qt c++ webQQ 源码

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Qt库提供了QJsonDocument和QJsonObject等类来处理JSON数据,帮助开发者提取所需的信息,如好友列表、...

    Webqq app

    1. **Web前端技术**:Webqq App的开发主要依赖于前端技术,如HTML、CSS和JavaScript。HTML用于构建网页结构,CSS负责样式设计,而JavaScript则用于实现交互性和动态功能。 2. **JavaScript框架**:为了提高开发效率...

    WebQQ协议.rar

    通过对这个"WebQQ协议.rar"压缩包中的源码进行学习和分析,开发者可以深入理解WebQQ协议的工作流程,这对于开发类似的Web即时通讯应用或者研究其他类似协议(如Web微信)都有极大的帮助。同时,这也是一个学习易语言...

Global site tag (gtag.js) - Google Analytics