真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

html5中編輯器核心思想的示例分析

這篇文章給大家分享的是有關(guān)html5中編輯器核心思想的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、網(wǎng)頁(yè)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、屏山網(wǎng)站維護(hù)、網(wǎng)站推廣。

代碼和特性在chrome49下測(cè)試有效。

文本渲染的本質(zhì)是對(duì)文本節(jié)點(diǎn)的渲染,通過(guò)瀏覽器內(nèi)置的對(duì)象Range可以獲得選擇的起始點(diǎn)、與終止點(diǎn)

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;
};

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

只有當(dāng)起始點(diǎn)的開(kāi)頭或終止點(diǎn)的末尾是
時(shí),返回的不是文本節(jié)點(diǎn),可以通過(guò)start,end確定br元素的位置分別是startContainer.childNodes[start],endContainer.childNodes[end-1]。返回的是文本節(jié)點(diǎn)start表示光標(biāo)相對(duì)于起始文本節(jié)點(diǎn)所在的起始位置,end表示光標(biāo)相對(duì)于終止文本節(jié)點(diǎn)所在的終止位置。

獲得下一個(gè)文本節(jié)點(diǎn)的算法為

function getNextTextNode(startNode,dir = "nextSibling"){//記錄startNode變化之前的狀態(tài),startNode變化后無(wú)效時(shí)便于狀態(tài)的回滾let unchangeNode = startNode;if(startNode.nodeType == 3){
        startNode = startNode[dir];
    }while (true){if(startNode == undefined){if(unchangeNode == undefined){//保護(hù)機(jī)制throw new Error("程序會(huì)陷入死循環(huán)");break;
            }/*startNode所在的父元素所有選中節(jié)點(diǎn)遍歷完畢,將sartNode指向父元素的兄弟節(jié)點(diǎn)*/let parent = unchangeNode.parentElement;
            unchangeNode = parent;
            startNode = parent[dir];
        }else if(startNode.nodeType == 3){//文本節(jié)點(diǎn)則退出循環(huán)break;
        }else if(startNode.tagName == "BR"){//處理單標(biāo)簽,避免不必要的迭代unchangeNode = startNode;
            startNode = startNode[dir];
        }else if(startNode.nodeType == 1){/*如果是雙標(biāo)簽元素則進(jìn)入*/unchangeNode = startNode;if(dir == "previousSibling"){

                startNode = $(startNode).contents().last().get(0);
            }else if(dir == "nextSibling"){
                startNode = $(startNode).contents().first().get(0);
            }else {//便于錯(cuò)誤的定位throw new Error("錯(cuò)誤的遍歷方向:"+dir);
            }
        }else {//便于錯(cuò)誤的定位throw new Error("不期待的元素類(lèi)型=》"+startNode);

        }
    }    return startNode;
    
}

//上述函數(shù)用外部變量+while循環(huán)的方式取代遞歸,加入的保護(hù)機(jī)制減少誤用、潛在bug導(dǎo)致極差的體驗(yàn)。
獲得起始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)之間的所有文本節(jié)點(diǎn)

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

感謝各位的閱讀!關(guān)于“html5中編輯器核心思想的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!


網(wǎng)頁(yè)標(biāo)題:html5中編輯器核心思想的示例分析
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/igdjcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部