百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> H5编纂器中心思想的实例剖析-
分享文章到:

H5编纂器中心思想的实例剖析-

发布时间:08/01 来源:未知 浏览: 关键词:
代码和特性在chrome49下测试有效。文本渲染的本质是对文本节点的渲染,通过阅读器内置的对象Range可以获得选中的起始点、与终止点?varrangegetRangeObject();varstartrange.startOffset,endrange.endOffset;varstartContainerrange.startContai 代码和特性在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;
}

以上就是H5编纂器中心思想的实例剖析的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板