**和特性在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...