html5中编辑器核心思想的示例分析
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章给大家分享的是有关html5中编辑器核心思想的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码和特性在chrome49下测试有效。文本渲染的本质是对文本节
千家信息网最后更新 2025年11月09日html5中编辑器核心思想的示例分析
这篇文章给大家分享的是有关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;}; 起始点始终在左面,终止点始终在右面,不受选择方向的影响。
只有当起始点的开头或终止点的末尾是
时,返回的不是文本节点,可以通过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; }/*startNode所在的父元素所有选中节点遍历完毕,将sartNode指向父元素的兄弟节点*/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中编辑器核心思想的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
节点
文本
起始
元素
位置
所在
错误
循环
思想
核心
示例
编辑器
分析
代码
光标
内容
方向
更多
机制
标签
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
鸿蒙os手机软件开发
计算机网络技术imp什么意思
两个数据库同步数据接口的设计
电视连接服务器时间长
网络安全监管建设情况
河南省电力公司科技互联网部
中职计算机网络技术微课
金蝶云星空服务器角色
excel分类汇总数据库
数据库应用技术 1256
幻塔如何查看第一次登录服务器
数据库 可用性
ntp服务器和客户端配置
搜亚网络技术服务部
悟空识字突然连不上服务器
ftp服务器访问权限
黑龙江知网数据库
玖深网络技术有限公司
婵妈妈软件开发者
银行软件开发需要学习什么
数据库怎么实现安全性
网络安全四个字怎样写成艺术字
原舟互联网科技有限公司
图书馆自建数据库软件
18年发生的网络安全事件
网络安全使用技术的基本知识
安徽桐城网络安全检查
ftp服务器访问权限
魔兽世界tbc服务器崩溃
网络技术服务商怎么找客户