H5編輯器核心演算法和思想 遁地龍捲風

2021-10-07 16:55:09 字數 1634 閱讀 2551

**和特性在chrome49下測試有效。

文字渲染的本質是對文字節點的渲染,通過瀏覽器內建的物件range可以獲得選擇的起始點、與終止點

var range =getrangeobject();

var start =range.startoffset,

end =range.endoffset;

var startcontainer =range.startcontainer;

var endcontainer = range.endcontainer;

getrangeobjec**如下

function

getrangeobject()

}else

if(document.selection)

return

null

;};

view code

起始點始終在左面,終止點始終在右面,不受選擇方向的影響。

只有當起始點的開頭或終止點的末尾是

時,返回的不是文字節點,可以通過start,end確定br元素的位置分別是startcontainer.childnodes[start],endcontainer.childnodes[end-1]。返回的是文字節點start表示游標相對於起始文字節點所在的起始位置,end表示游標相對於終止文字節點所在的終止位置。

獲得下乙個文字節點的演算法為

function getnexttextnode(startnode,dir = "nextsibling")

while (true

)

/*startnode所在的父元素所有選中節點遍歷完畢,將sartnode指向父元素的兄弟節點

*/let parent =unchangenode.parentelement;

unchangenode =parent;

startnode =parent[dir];

}else

if(startnode.nodetype == 3)

else

if(startnode.tagname == "br")

else

if(startnode.nodetype == 1)

else

if(dir == "nextsibling")

else

}else

}return

startnode;

}

//上述函式用外部變數+while迴圈的方式取代遞迴,加入的保護機制減少誤用、潛在bug導致極差的體驗。

獲得起始節點和結束節點之間的所有文字節點

function

gettextnodes(starttextnode,endtextnode)

textnodearray.push(node);

}return

textnodearray;

}

讚賞支援

歡迎使用CSDN markdown編輯器haha

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

H5新特性 CSS選擇器

是在原先的css基礎上延伸出來的,為了更方便 快捷的選中元素,有利於開發人員的開發 div class box box style display inline block div box a style display inline block div box po style display i...

QML開發簡單瀏覽器(載入H5)

qml開發瀏覽器以及載入html5頁面,主要利用qml的webengineview可實現對網頁的載入。其 如下 import qtquick 2.4 import qtquick.layouts 1.2 import qtquick.controls 1.4 import qtquick.contr...