返回顶部
首页 > 资讯 > 前端开发 > html >html5中编辑器核心思想的示例分析
  • 145
分享到

html5中编辑器核心思想的示例分析

2024-04-02 19:04:59 145人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关HTML5中编辑器核心思想的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 代码和特性在chrome49下测试有效。

这篇文章给大家分享的是有关HTML5中编辑器核心思想的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

代码和特性在chrome49下测试有效。

文本渲染的本质是对文本节点的渲染,通过浏览器内置的对象Range可以获得选择的起始点、与终止点

var range = getRangeObject();var start = range.startOffset,
end = range.endOffset;var startContainer = range.startContainer;var endContainer = range.endContainer;

getRangeObjec代码如下

function getRangeObject(){if(window.getSelection)
{var selection = window.getSelection();if(selection.rangeCount > 0)
{return selection.getRangeAt(0);
}
}else if(document.selection)
{return document.selection.createRange(); 
}return null;
};

 起始点始终在左面,终止点始终在右面,不受选择方向的影响。

  只有当起始点的开头或终止点的末尾是<br/>时,返回的不是文本节点,可以通过start,end确定br元素的位置分别是startContainer.childnodes[start],endContainer.childNodes[end-1]。返回的是文本节点start表示光标相对于起始文本节点所在的起始位置,end表示光标相对于终止文本节点所在的终止位置。

获得下一个文本节点的算法为

function getNextTextNode(startNode,dir = "nextSibling"){//记录startNode变化之前的状态,startNode变化后无效时便于状态的回滚let unchangeNode = startNode;if(startNode.nodeType == 3){
        startNode = startNode[dir];
    }while (true){if(startNode == undefined){if(unchangeNode == undefined){//保护机制throw new Error("程序会陷入死循环");break;
            }let parent = unchangeNode.parentElement;
            unchangeNode = parent;
            startNode = parent[dir];
        }else if(startNode.nodeType == 3){//文本节点则退出循环break;
        }else if(startNode.tagName == "BR"){//处理单标签,避免不必要的迭代unchangeNode = startNode;
            startNode = startNode[dir];
        }else if(startNode.nodeType == 1){unchangeNode = startNode;if(dir == "previousSibling"){

                startNode = $(startNode).contents().last().get(0);
            }else if(dir == "nextSibling"){
                startNode = $(startNode).contents().first().get(0);
            }else {//便于错误的定位throw new Error("错误的遍历方向:"+dir);
            }
        }else {//便于错误的定位throw new Error("不期待的元素类型=》"+startNode);

        }
    }    return startNode;
    
}

  //上述函数用外部变量+while循环的方式取代递归,加入的保护机制减少误用、潜在bug导致极差的体验。
获得起始节点和结束节点之间的所有文本节点

function getTextNodes(startTextNode,endTextNode){
    let textNodeArray = [];
    let node = startTextNode;while (true) {
        node = getNextTextNode(node);if(node == endTextNode){break;
        }
        textNodeArray.push(node);
    }    return textNodeArray;
}

感谢各位的阅读!关于“html5中编辑器核心思想的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: html5中编辑器核心思想的示例分析

本文链接: https://lsjlt.com/news/80867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • html5中编辑器核心思想的示例分析
    这篇文章给大家分享的是有关html5中编辑器核心思想的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 代码和特性在chrome49下测试有效。...
    99+
    2024-04-02
  • Html5富文本编辑器的示例分析
    这篇文章给大家分享的是有关Html5富文本编辑器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 使用H5的全局属性contentedita...
    99+
    2024-04-02
  • Vim中编辑器操作的示例分析
    小编给大家分享一下Vim中编辑器操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vim   [参数]   [文...
    99+
    2023-06-09
  • java编程Reference核心原理示例源码分析
    带着问题,看源码针对性会更强一点、印象会更深刻、并且效果也会更好。所以我先卖个关子,提两个问题(没准下次跳槽时就被问到)。 我们可以用ByteBuffer的allocateDirec...
    99+
    2024-04-02
  • Java SpringBoot核心源码的示例分析
    本篇文章给大家分享的是有关Java SpringBoot核心源码的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SpringBoot源码主线分析我们要分析一个...
    99+
    2023-06-22
  • vue组件三大核心的示例分析
    这篇文章主要介绍了vue组件三大核心的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、属性 1.自定义属性propsprop 定义...
    99+
    2024-04-02
  • 关于PHP核心功能的示例分析
    关于PHP核心功能的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP是我们一直都很关注的语言之一,随着PHP6的升级,它的功能也越来越强大,我们这里...
    99+
    2023-06-17
  • JS中富文本编辑器TinyMCE的示例分析
    小编给大家分享一下JS中富文本编辑器TinyMCE的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题外话最近负责了一...
    99+
    2024-04-02
  • Linux内核编译的示例分析
    小编给大家分享一下Linux内核编译的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   下载源代码Linux内核总是不断发展的,***的内核K...
    99+
    2023-06-16
  • linux中Vim编辑器兼容模式的示例分析
    小编给大家分享一下linux中Vim编辑器兼容模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!目前,在我们讲述 Vim 的教程中,讨论过编辑器的模式行...
    99+
    2023-06-16
  • web脚本编辑器ACE Editor的示例分析
    小编给大家分享一下web脚本编辑器ACE Editor的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!经常会有在线编辑脚本的需求,但是如果使用textar...
    99+
    2023-06-04
  • Html5中meta的示例分析
    这篇文章主要为大家展示了“Html5中meta的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Html5中meta的示例分析”这篇文章吧。如下所示:&l...
    99+
    2024-04-02
  • HTML5中Landmark的示例分析
    这篇文章主要介绍HTML5中Landmark的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是 LandmarkLandmark 是一种用来表示网页组织结构的方法。通常一个网页可以被切分成几个大块以一个视...
    99+
    2023-06-09
  • Html5中localStorage的示例分析
    这篇文章将为大家详细讲解有关Html5中localStorage的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。定义只读的 localStorage 允许你访问一个 Document 的远端(or...
    99+
    2023-06-09
  • PHP核心特性命名空间的示例分析
    小编给大家分享一下PHP核心特性命名空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!提出PHP 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计:同一个目录下不允许有相同的文...
    99+
    2023-06-15
  • CSS的webkit核心浏览器实例分析
    今天小编给大家分享一下CSS的webkit核心浏览器实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • HTML5中Application Cache的示例分析
    小编给大家分享一下HTML5中Application Cache的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!  什么是Application Cache   HTML5引入...
    99+
    2024-04-02
  • Linux中使用文本编辑器vi命令的示例分析
    小编给大家分享一下Linux中使用文本编辑器vi命令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vi/vim是什么?Linux世界几乎所有的配置文件都...
    99+
    2023-06-09
  • Ajax技术组成与核心原理的示例分析
    这篇文章将为大家详细讲解有关Ajax技术组成与核心原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、Ajax特点:局部刷新、提高用户的体验度,数据从服务器商...
    99+
    2024-04-02
  • Linux内核中断的示例分析
    这篇文章主要介绍了Linux内核中断的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时...
    99+
    2023-06-27
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作