91福利精品一区二区,欧美激情一区二区三3,国产91精品久久久久久久粉嫩,国产精品ww在线观看,91久久精品一区二区别,国产99视频精品草莓免视看,91伊人成人成网77777,亚洲精华液一二三产区,97免费播放视频观看

利用 JavaScript 實(shí)現(xiàn)富文本編輯器

桂林seo半杯酒博客
近期項(xiàng)目中需要開發(fā)一個(gè)兼容PC和移動(dòng)端的富文本編輯器,其中包含了一些特殊的定制功能??疾炝讼卢F(xiàn)有的js富文本編輯器,桌面端的很多,移動(dòng)端的幾乎沒(méi)有。桌面端以UEditor為代表。但是我們并不打算考慮兼容性,所以沒(méi)有必要采用UEditor這么重的插件。為此決定自研一個(gè)富文本編輯器。本文,主要介紹如何實(shí)現(xiàn)富文本編輯器,和解決一些不同瀏覽器和設(shè)備之間的bug。

準(zhǔn)備階段

在現(xiàn)代瀏覽器中已經(jīng)為我們準(zhǔn)備好了許多API來(lái)讓 html 支持富文本編輯功能,我們沒(méi)有必要自己完成全部?jī)?nèi)容。

contenteditable=”true”

首先我們需要讓一個(gè) p 成為可編輯狀態(tài),加入contenteditable="true" 屬性即可。

<p contenteditable="true" id="rich-editor"></p>

在這樣的 <p>中插入任何節(jié)點(diǎn)都將默認(rèn)是可編輯狀態(tài)的。如果想插入不可編輯的節(jié)點(diǎn),我們就需要指定插入節(jié)點(diǎn)的屬性為 contenteditable="false"。

光標(biāo)操作

作為富文本編輯器,開發(fā)者需要有能力控制光標(biāo)的各種狀態(tài)信息,位置信息等。瀏覽器提供了 selection 對(duì)象和 range 對(duì)象來(lái)操作光標(biāo)。

selection 對(duì)象

Selection對(duì)象表示用戶選擇的文本范圍或插入符號(hào)的當(dāng)前位置。它代表頁(yè)面中的文本選區(qū),可能橫跨多個(gè)元素。文本選區(qū)由用戶拖拽鼠標(biāo)經(jīng)過(guò)文字而產(chǎn)生。

獲得一個(gè) selection 對(duì)象

let selection = window.getSelection();

通常情況下我們不會(huì)直接操作 selection 對(duì)象,而是需要操作用 seleciton 對(duì)象所對(duì)應(yīng)的用戶選擇的 ranges (區(qū)域),俗稱”拖藍(lán)“。獲取方式如下:

let range = selection.getRangeAt(0);

由于瀏覽器當(dāng)前可能存在多個(gè)文本選取,所以 getRangeAt 函數(shù)接受一個(gè)索引值。在富文本編輯其中,我們不考慮多選取的可能性。

selection 對(duì)象還有兩個(gè)重要的方法, addRange 和 removeAllRanges。分別用于向當(dāng)前選取添加一個(gè) range 對(duì)象和 刪除所有 range 對(duì)象。之后你會(huì)看到他們的用途。

range 對(duì)象

通過(guò) selection 對(duì)象獲得的 range 對(duì)象才是我們操作光標(biāo)的重點(diǎn)。Range表示包含節(jié)點(diǎn)和部分文本節(jié)點(diǎn)的文檔片段。初見 range 對(duì)象你有可能會(huì)感到陌生又熟悉,在哪兒看見過(guò)呢?作為一個(gè)前端工程師,想必你一定拜讀過(guò)《java 高級(jí)程序設(shè)計(jì)第三版》 這本書。在第12.4節(jié),作者為我們介紹了 DOM2 級(jí)提供的 range 接口,用來(lái)更好的控制頁(yè)面。反正我當(dāng)時(shí)看的一臉????這個(gè)有啥用,也沒(méi)有這種需求啊。這里我們就大量的用到這個(gè)對(duì)象。對(duì)于下面節(jié)點(diǎn):

<p contenteditable="true"id="rich-editor">

<p>百度EUX團(tuán)隊(duì)</p>

</p>

光標(biāo)位置如圖所示:

打印出此時(shí)的 range 對(duì)象:

其中屬性含義如下:

* startContainer: range 范圍的起始節(jié)點(diǎn)。

* endContainer: range 范圍的結(jié)束節(jié)點(diǎn)

* startOffset: range 起點(diǎn)位置的偏移量。

* endOffset: range 終點(diǎn)位置的偏移量。

* commonAncestorContainer: 返回包含 startContainer 和 endContainer 的最深的節(jié)點(diǎn)。

* collapsed: 返回一個(gè)用于判斷 Range 起始位置和終止位置是否相同的布爾值。

這里我們的 startContainer , endContainer, commonAncestorContainer都為 #text 文本節(jié)點(diǎn) ‘百度EUX團(tuán)隊(duì)’。因?yàn)楣鈽?biāo)在‘度‘字后面,所以startOffset 和 endOffset 均為 2。且沒(méi)有產(chǎn)生拖藍(lán),所以 collapsed 的值為 true。我們?cè)倏匆粋€(gè)產(chǎn)生拖藍(lán)的例子:

光標(biāo)位置如圖所示:

打印出此時(shí)的 range 對(duì)象:

由于產(chǎn)生了拖藍(lán) startContainer 和 endContainer 不再一致,collapsed 的值變?yōu)榱?false。startOffset 和 endOffset 正好代表了拖藍(lán)的起終位置。更多的效果大家自己嘗試吧。

操作一個(gè) range 節(jié)點(diǎn),主要有如下方法:

  • setStart(): 設(shè)置 Range 的起點(diǎn)

  • setEnd(): 設(shè)置 Range 的終點(diǎn)

  • selectNode(): 設(shè)定一個(gè)包含節(jié)點(diǎn)和節(jié)點(diǎn)內(nèi)容的 Range

  • collapse(): 向指定端點(diǎn)折疊該 Range

  • insertNode(): 在 Range 的起點(diǎn)處插入節(jié)點(diǎn)。

  • cloneRange(): 返回?fù)碛泻驮?Range 相同端點(diǎn)的克隆 Range 對(duì)象

富文本編輯里面常用的就這么多,還有很多方法就不列舉了。

修改光標(biāo)位置

我們可以通過(guò)調(diào)用 setStart() 和 setEnd() 方法,來(lái)修改一個(gè)光標(biāo)的位置或拖藍(lán)范圍。這兩個(gè)方法接受的參數(shù)為各自的起終節(jié)點(diǎn)和偏移量。例如我想讓光標(biāo)位置到”百度EUX團(tuán)隊(duì)”最末尾,那么可以采用如下方法:

let range= window.getSelection().getRangeAt(0),

textEle= range.commonAncestorContainer;

range.setStart(range.startContainer,textEle.length);

range.setEnd(range.endContainer,textEle.length);

我們加入一個(gè)定時(shí)器來(lái)查看效果:

然而這種方式有個(gè)局限性,就是當(dāng)光標(biāo)所在的節(jié)點(diǎn)如果發(fā)生了變動(dòng)。比如被替換或者加入新的節(jié)點(diǎn)了,那么再用這種方式就不會(huì)有任何效果。為此我們有時(shí)候需要一種強(qiáng)制更改光標(biāo)位置手段, 簡(jiǎn)要代碼如下(實(shí)際中你有可能還需要考慮自閉和元素等內(nèi)容):

functionresetRange(startContainer,startOffset,endContainer,endOffset){

let selection= window.getSelection();

selection.removeAllRanges();

let range= document.createRange();

range.setStart(startContainer,startOffset);

range.setEnd(endContainer,endOffset);

selection.addRange(range);

}

我們通過(guò)重新創(chuàng)造一個(gè) range 對(duì)象并且刪除原有的 ranges 來(lái)保證光標(biāo)一定會(huì)變動(dòng)到我們想要的位置。

修改文本格式

實(shí)現(xiàn)富文本編輯器,我們就要能夠有修改文檔格式的能力,比如加粗,斜體,文本顏色,列表等內(nèi)容。DOM 為可編輯區(qū)提供了 document.execCommand 方法,該方法允許運(yùn)行命令來(lái)操縱可編輯區(qū)域的內(nèi)容。大多數(shù)命令影響文檔的選擇(粗體,斜體等),而其他命令插入新元素(添加鏈接)或影響整行(縮進(jìn))。當(dāng)使用 contentEditable時(shí),調(diào)用 execCommand() 將影響當(dāng)前活動(dòng)的可編輯元素。語(yǔ)法如下:

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

  • aCommandName: 一個(gè) DOMString ,命令的名稱。可用命令列表請(qǐng)參閱 命令 。

  • aShowDefaultUI: 一個(gè) Boolean, 是否展示用戶界面,一般為 false。Mozilla 沒(méi)有實(shí)現(xiàn)。

  • aValueArgument: 一些命令(例如insertImage)需要額外的參數(shù)(insertImage需要提供插入image的url),默認(rèn)為null。

總之瀏覽器能把大部分我們想到的富文本編輯器需要的功能都實(shí)現(xiàn)了,這里我就不一一演示了。感興趣的同學(xué)可以查看 MDN – document.execCommand。

到這里,我相信你已經(jīng)可以做出一個(gè)像模像樣的富文本編輯器了。想想還挺激動(dòng)的,但是呢,一切都沒(méi)有結(jié)束,瀏覽器又一次坑了我們。

實(shí)戰(zhàn)開始,填坑的旅途

就在我們都以為開發(fā)如此簡(jiǎn)單的時(shí)候,實(shí)際上手卻遇到了許多坑。

修正瀏覽器的默認(rèn)效果

瀏覽器提供的富文本效果并不總是好用的,下面介紹幾個(gè)遇到的問(wèn)題。

回車換行

當(dāng)我們?cè)诰庉嬈渲休斎雰?nèi)容并回車換行繼續(xù)輸入后,可編輯框內(nèi)容生成的節(jié)點(diǎn)和我們預(yù)期是不符的。

可以看到最先輸入的文字沒(méi)有被包裹起來(lái),而換行產(chǎn)生的內(nèi)容,包裹元素是 <p>標(biāo)簽。為了能夠讓文字被 <p>元素包裹起來(lái)。

我們要在初始化的時(shí)候,向<p>默認(rèn)插入 <p><br></p>元素

(<br>標(biāo)簽用來(lái)占位,有內(nèi)容輸入后會(huì)自動(dòng)刪除)。這樣以后每次回車產(chǎn)生的新內(nèi)容都會(huì)被 <p>元素包裹起來(lái)(在可編輯狀態(tài)下,回車換行產(chǎn)生的新結(jié)構(gòu)會(huì)默認(rèn)拷貝之前的內(nèi)容,包裹節(jié)點(diǎn),類名等各種內(nèi)容)。

我們還需要監(jiān)聽 keyUp 事件下 event.keyCode === 8 刪除鍵。當(dāng)編輯器中內(nèi)容全被清空后(delete鍵也會(huì)把 <p>標(biāo)簽刪除),要重新加入<p><br></p>標(biāo)簽,并把光標(biāo)定位在里面。

插入 ul 和 ol 位置錯(cuò)誤

當(dāng)我們調(diào)用 document.execCommand("insertUnorderedList", false, null) 來(lái)插入一個(gè)列表的時(shí)候,新的列表會(huì)被插入<p>標(biāo)簽中。

為此我們需要每次調(diào)用該命令前做一次修正,參考代碼如下:

functionadjustList(){

let lists= document.querySelectorAll("ol, ul");

for(leti= 0;i< lists.length;i++){

let ele= lists[i];// ol

let parentNode= ele.parentNode;

if(parentNode.tagName=== 'P'&& parentNode.lastChild=== parentNode.firstChild){

parentNode.insertAdjacentElement('beforebegin',ele);

parentNode.remove()

}

}

}

這里有個(gè)附帶的小問(wèn)題,我試圖在 <li><p></p></li> 維護(hù)這樣的編輯器結(jié)構(gòu)(默認(rèn)是沒(méi)有 <p>標(biāo)簽的)。效果在 chrome 下運(yùn)行很好。但是在 safari 中,回車永遠(yuǎn)不會(huì)產(chǎn)生新的 <li>標(biāo)簽,這樣就是去了該有的列表效果。

插入分割線

調(diào)用 document.execCommand('insertHorizontalRule', false, null); 會(huì)插入一個(gè)<hr>標(biāo)簽。然而產(chǎn)生的效果卻是這樣的:

光標(biāo)和<hr>的效果一致了。為此要判斷當(dāng)前光標(biāo)是否在 <li>里面,如果是則在 <hr>后面追加一個(gè)空的文本節(jié)點(diǎn) #text 不是的話追加 <p><br></p>。然后將光標(biāo)定位在里面,可用如下方式查找。

/**

* 查找父元素

* @param {String} root

* @param {String | Array} name

*/

functionfindParentByTagName(root,name){

let parent= root;

if(typeof name=== "string"){

name= [name];

}

while(name.indexOf(parent.nodeName.toLowerCase())=== -1&& parent.nodeName!== "BODY"&& parent.nodeName!== "HTML"){

parent= parent.parentNode;

}

returnparent.nodeName=== "BODY"|| parent.nodeName=== "HTML"?null: parent;

},

插入鏈接

調(diào)用 document.execCommand('createLink', false, url); 方法我們可以插入一個(gè) url 鏈接,但是該方法不支持插入指定文字的鏈接。同時(shí)對(duì)已經(jīng)有鏈接的位置可以反復(fù)插入新的鏈接。為此我們需要重寫此方法。

functioninsertLink(url,title){

let selection= document.getSelection(),

range= selection.getRangeAt(0);

if(range.collapsed){

let start= range.startContainer,

parent= Util.findParentByTagName(start,'a');

if(parent){

parent.setAttribute('src',url);

}else{

this.insertHTML(`<ahref="${url}">${title}</a>`);

}

}else{

document.execCommand('createLink',false,url);

}

}

設(shè)置 h1 ~ h6 標(biāo)題

瀏覽器沒(méi)有現(xiàn)成的方法,但我們可以借助 document.execCommand('formatBlock', false, tag), 來(lái)實(shí)現(xiàn),代碼如下:

functionsetHeading(heading){

let formatTag= heading,

formatBlock= document.queryCommandValue("formatBlock");

if(formatBlock.length> 0&& formatBlock.toLowerCase()=== formatTag){

document.execCommand('formatBlock',false,``);

}else{

document.execCommand('formatBlock',false,``);

}

}

插入定制內(nèi)容

當(dāng)編輯器上傳或加載附件的時(shí)候,要插入能夠展示附件的

節(jié)點(diǎn)卡片到編輯中。這里我們借助 document.execCommand('insertHTML', false, html); 來(lái)插入內(nèi)容。為了防止p被編輯,要設(shè)置 contenteditable="false"哦。

處理 paste 粘貼

在富文本編輯器中,粘貼效果默認(rèn)采用如下規(guī)則:

  1. 如果是帶有格式的文本,則保留格式(格式會(huì)被轉(zhuǎn)換成html標(biāo)簽的形式)

  2. 粘貼圖文混排的內(nèi)容,圖片可以顯示,src 為圖片真實(shí)地址。

  3. 通過(guò)復(fù)制圖片來(lái)進(jìn)行粘貼的時(shí)候,不能粘入內(nèi)容

  4. 粘貼其他格式內(nèi)容,不能粘入內(nèi)容

為了能夠控制粘貼的內(nèi)容,我們監(jiān)聽 paste 事件。該事件的 event 對(duì)象中會(huì)包含一個(gè) clipboardData 剪切板對(duì)象。我們可以利用該對(duì)象的 getData 方法來(lái)獲得帶有格式和不帶格式的內(nèi)容,如下。

let plainText= event.clipboardData.getData('text/plain');// 無(wú)格式文本

let plainHTML= event.clipboardData.getData('text/html');// 有格式文本

之后調(diào)用 document.execCommand('insertText', false, plainText); 或 document.execCommand('insertHTML', false, plainHTML; 來(lái)重寫編輯上的paste效果。

然而對(duì)于規(guī)則 3 ,上述方案就無(wú)法處理了。這里我們要引入 event.clipboardData.items 。這是一個(gè)數(shù)組包含了所有剪切板中的內(nèi)容對(duì)象。比如你復(fù)制了一張圖片來(lái)粘貼,那么 event.clipboardData.items 的長(zhǎng)度就為2:

items[0] 為圖片的名稱,items[0].kind 為 ‘string’, items[0].type 為 ‘text/plain’ 或 ‘text/html’。獲取內(nèi)容方式如下:

items[0].getAsString(str=> {

// 處理 str 即可

})

items[1] 為圖片的二進(jìn)制數(shù)據(jù),items[1].kind 為’file’, items[1].type 為圖片的格式。想要獲取里面的內(nèi)容,我們就需要?jiǎng)?chuàng)建 FileReader 對(duì)象了。示例代碼如下:

let file= items[1].getAsFile();

// file.size 為文件大小

let reader= newFileReader();

reader.= function(){

// reader.result 為文件內(nèi)容,就可以做上傳操作了

}

if(/image/.test(item.type)){

reader.readAsDataURL(file);// 讀取為 base64 格式

}

處理完圖片,那么對(duì)于復(fù)制粘貼其他格式內(nèi)容會(huì)怎么樣呢?在 mac 中,如果你復(fù)制一個(gè)磁盤文件,event.clipboardData.items 的長(zhǎng)度為 2。 items[0] 依然為文件名,然而 items[1] 則為圖片了,沒(méi)錯(cuò),是文件的縮略圖。

輸入法處理

當(dāng)使用輸入發(fā)的時(shí)候,有時(shí)候會(huì)發(fā)生一些意想不到的事情。 比如百度輸入法可以輸入一張本地圖片,為此我們需要監(jiān)聽輸入法產(chǎn)生的內(nèi)容做處理。這里通過(guò)如下兩個(gè)事件處理:

  • compositionstart: 當(dāng)瀏覽器有非直接的文字輸入時(shí), compositionstart事件會(huì)以同步模式觸發(fā)

  • compositionend: 當(dāng)瀏覽器是直接的文字輸入時(shí), compositionend會(huì)以同步模式觸發(fā)

修復(fù)移動(dòng)端的問(wèn)題

在移動(dòng)端,富文本編輯器的問(wèn)題主要集中在光標(biāo)和鍵盤上面。我這里介紹幾個(gè)比較大的坑。

自動(dòng)獲取焦點(diǎn)

如果想讓我們的編輯器自動(dòng)獲得焦點(diǎn),彈出軟鍵盤,可以利用 focus() 方法。然而在 ios 下,死活沒(méi)有結(jié)果。這主要是因?yàn)?ios safari 中,為了安全考慮不允許代碼獲得焦點(diǎn)。只能通過(guò)用戶交互點(diǎn)擊才可以。還好,這一限制可以去除:

[self.appWebView setKeyboardDisplayRequiresUserAction:NO]

iOS 下回車換行,滾動(dòng)條不會(huì)自動(dòng)滾動(dòng)

在 iOS 下,當(dāng)我們回車換行的時(shí)候,滾動(dòng)條并不會(huì)隨著滾動(dòng)下去。這樣光標(biāo)就可能被鍵盤擋住,體驗(yàn)不好。為了解決這一問(wèn)題,我們就需要監(jiān)聽 selectionchange 事件,觸發(fā)時(shí),計(jì)算每次光標(biāo)編輯器頂端距離,之后再調(diào)用 window.scroll() 即可解決。問(wèn)題在于我們要如何計(jì)算當(dāng)前光標(biāo)的位置,如果僅是計(jì)算光標(biāo)所在父元素的位置很有可能出現(xiàn)偏差(多行文本計(jì)算不準(zhǔn))。我們可以通過(guò)創(chuàng)建一個(gè)臨時(shí) 元素查到光標(biāo)位置,計(jì)算元素的位置即可。代碼如下:

functiongetCaretYPosition(){

let sel= window.getSelection(),

range= sel.getRangeAt(0);

let span= document.('span');

range.collapse(false);

range.insertNode(span);

vartopPosition= span.offsetTop;

span.parentNode.removeChild(span);

returntopPosition;

}

正當(dāng)我開心的時(shí)候,安卓端反應(yīng),編輯器越編輯越卡。什么鬼?我在 chrome 上線檢查了一下,發(fā)現(xiàn) selectionchange 函數(shù)一直在運(yùn)行,不管有沒(méi)有操作。

在逐一排查的時(shí)候發(fā)現(xiàn)了這么一個(gè)事實(shí)。range.insertNode 函數(shù)同樣觸發(fā) selectionchange 事件。這樣就形成了一個(gè)死循環(huán)。這個(gè)死循環(huán)在 safari 中就不會(huì)產(chǎn)生,只出現(xiàn)在 safari 中,為此我們就需要加上瀏覽器類型判斷了。

鍵盤彈起遮擋輸入部分

網(wǎng)上對(duì)于這個(gè)問(wèn)題主要的方案就是,設(shè)置定時(shí)器。局限與前端,確實(shí)只能這采用這樣笨笨的解決。最后我們讓 iOS 同學(xué)在鍵盤彈出的時(shí)候,將 webview 高度減去軟鍵盤高度就解決了。

CGFloat webviewY= 64.0+ self.noteSourceView.height;

self.appWebView.frame= CGRectMake(0,webviewY,BDScreenWidth,BDScreenHeight- webviewY- height);

插入圖片失敗

在移動(dòng)端,通過(guò)調(diào)用 jsbridge 來(lái)喚起相冊(cè)選擇圖片。之后調(diào)用 insertImage 函數(shù)來(lái)向編輯器插入圖片。然而,插入圖片一直失敗。最后發(fā)現(xiàn)是因?yàn)樵?safari 下,如果編輯器失去了焦點(diǎn),那么 selection 和 range 對(duì)象將銷毀。因此調(diào)用 insertImage 時(shí),并不能獲得光標(biāo)所在位置,因此失敗。為此需要增加,backupRange() 和 restoreRange() 函數(shù)。當(dāng)頁(yè)面失去焦點(diǎn)的時(shí)候記錄 range 信息,插入圖片前恢復(fù) range 信息。

backupRange(){

let selection= window.getSelection();

let range= selection.getRangeAt(0);

this.currentSelection= {

"startContainer": range.startContainer,

"startOffset": range.startOffset,

"endContainer": range.endContainer,

"endOffset": range.endOffset

}

}

restoreRange(){

if(this.currentSelection){

let selection= window.getSelection();

selection.removeAllRanges();

let range= document.createRange();

range.setStart(this.currentSelection.startContainer,this.currentSelection.startOffset);

range.setEnd(this.currentSelection.endContainer,this.currentSelection.endOffset);

// 向選區(qū)中添加一個(gè)區(qū)域

selection.addRange(range);

}

}

在 chrome 中,失去焦點(diǎn)并不會(huì)清除 seleciton 對(duì)象和 range 對(duì)象,這樣我們輕輕松松一個(gè) focus() 就搞定了。

重要問(wèn)題就這么多,限于篇幅限制其他的問(wèn)題省略了。總體來(lái)說(shuō),填坑花了開發(fā)的大部分時(shí)間。

其他功能

基礎(chǔ)功能修修補(bǔ)補(bǔ)以后,實(shí)際項(xiàng)目中有可能遇到一些其他的需求,比如當(dāng)前光標(biāo)所在文字內(nèi)容狀態(tài)啊,圖片拖拽放大啊,待辦列表功能,附件卡片等功能啊,markdown切換等等。在了解了js 富文本的種種坑之后,range 對(duì)象的操作之后,相信這些問(wèn)題你都可以輕松解決。這里最后提幾個(gè)做擴(kuò)展功能時(shí)候遇到的有去的問(wèn)題。

回車換行帶格式

前面已經(jīng)說(shuō)過(guò)了,富文本編輯器的機(jī)制就是這樣,當(dāng)你回車換行的時(shí)候新產(chǎn)生的內(nèi)容和之前的格式一模一樣。如果我們利用 .card 類來(lái)定義了一個(gè)卡片內(nèi)容,那么換行產(chǎn)生的新的段落都將含有 .card 類且結(jié)構(gòu)也是直接 copy 過(guò)來(lái)的。我們想要屏蔽這種機(jī)制,于是嘗試在 keydown 的階段做處理(如果在 keyup 階段處理用戶體驗(yàn)不好)。然而,并沒(méi)有什么用,因?yàn)橛脩糇远x的 keydown 事件要在 瀏覽器富文本的默認(rèn) keydown 事件之前觸發(fā),這樣你就做不了任何處理。

為此我們?yōu)檫@類特殊的個(gè)體都添加一個(gè) property 屬性,添加在 property 上的內(nèi)容是不會(huì)被copy下來(lái)的。這樣以后就可以區(qū)分出來(lái)了,從而做對(duì)應(yīng)的處理。

獲取當(dāng)前光標(biāo)所在處樣式

這里主要是考慮 下劃線,刪除線之類的樣式,這些樣式都是用標(biāo)簽類描述的,所以要遍歷標(biāo)簽層級(jí)。直接上代碼:

functiongetCaretStyle(){

let selection= window.getSelection(),

range= selection.getRangeAt(0);

aimEle= range.commonAncestorContainer,

tempEle= null;

let tags= ["U","I","B","STRIKE"],

result= [];

if(aimEle.nodeType=== 3){

aimEle= aimEle.parentNode;

}

tempEle= aimEle;

while(block.indexOf(tempEle.nodeName.toLowerCase())=== -1){

if(tags.indexOf(tempEle.nodeName)!== -1){

result.push(tempEle.nodeName);

}

tempEle= tempEle.parentNode;

}

let viewStyle= {

"italic": result.indexOf("I")!== -1?true: false,

"underline": result.indexOf("U")!== -1?true: false,

"bold": result.indexOf("B")!== -1?true: false,

"strike": result.indexOf("STRIKE")!== -1?true: false

}

let styles= window.getComputedStyle(aimEle,null);

viewStyle.fontSize= styles["fontSize"],

viewStyle.color= styles["color"],

viewStyle.fontWeight= styles["fontWeight"],

viewStyle.fontStyle= styles["fontStyle"],

viewStyle.textDecoration= styles["textDecoration"];

viewStyle.isH1= Util.findParentByTagName(aimEle,"h1")?true: false;

viewStyle.isH2= Util.findParentByTagName(aimEle,"h2")?true: false;

viewStyle.isP= Util.findParentByTagName(aimEle,"p")?true: false;

viewStyle.isUl= Util.findParentByTagName(aimEle,"ul")?true: false;

viewStyle.isOl= Util.findParentByTagName(aimEle,"ol")?true: false;

returnviewStyle;

}

最后說(shuō)一句

該項(xiàng)目目前提測(cè)中,所以呢,一但發(fā)現(xiàn)有意思的坑,我會(huì)及時(shí)補(bǔ)充的。

參考內(nèi)容

  • MDN – document.execCommand

  • MDN – selection

  • MDN – range

  • input 事件兼容處理以及中文輸入法優(yōu)化

  • js獲取剪切板內(nèi)容,js控制圖片粘貼

  • iOS UIWebView 全屬性詳解

欧美熟妇亚洲中文不卡少妇 | 色男人的天堂一区二区三区| 俄罗斯第一次处破女| 成人麻豆免费视频精品区 | 午夜三级影片免费播放| 亚洲av一区视频在线观看| 亚洲永久av午夜福利| av大片在线观看免费| 亚洲国产精品美女久久久av| 中文字幕看日韩精品视频 | 99,九九,久久精品| 一级白丝美女久久久久| 久久视频十八岁亚洲精品久久视频| 欧美精品日韩第一页| 日韩精品高清免费视频| 丝袜美腿色诱视频在线观看| 亚洲国产图片小说一区二区| 欧美日韩无卡一二三区| 日本公与妇电影三级| 免费在线国产观看av| 亚洲欧美综合区丁香六月| 亚洲伊人av 综合福利| 91精品人人妻人人澡人人爽人人| 亚洲男人天堂111117av| 亚洲 网友 在线 观看| 亚洲天堂av插插插| 91麻豆精品国产乱码久久久久久| 熟女一区二区三区四区五区视频 | av蜜桃网在线观看| 爱人体-看人体人体摄影| 精品视频在线观看久久| 二根鸡巴日一个穴视频| 天天操天天操天天干天天| 免费熟女精品一区二区三区| 另类图片亚洲图区第一页| 两个人午夜免费看视频| 老师让我插进去69AV| 日本av都是真做吗| av男人免费的天堂| 可以直接在线观看的一区| 亚洲av综合久久久久久| 亚洲综合久久综合网| 大香蕉大香蕉在线播放| 中文字幕日本一本二本三区| 特黄特色大片观看免费| 国产国语露脸在线视频播放| 青春草在线视频播放免费观看网站| 亚洲国产精品国自产拍a∨| 亚洲国产日韩欧美高清片vr| 国产美女遭高潮免费视频| 日本免费播放一区二区三区| 久久亚洲伊人99精品影院| 国产熟女一区二区三区四| 好吊视频一区二 区三区视频| 天天日天天添天天爽| 亚洲一区二区三区邪恶成人| 老师让我插进去69AV| 丰满的女教师bd视频| 亚洲自拍偷拍清纯唯美| 五月桃花网婷婷伊人久久| 亚洲偷偷自拍视频网| 日韩成人综艺在线播放| 成人a毛片久久免费播放| 97色婷婷久久99国产视频| 成人教育 在线学习| 亚洲自拍偷拍视频二区| 久久精品国产亚洲AV牛牛影视| www久久久久久久99| 一区二区三区在线中国| 欧美丝袜熟女日韩亚洲| 狠狠操 在线视频 轻轻草 | 精品少妇人妻av免费久久胖妇| 日本免费播放一区二区三区| 成人午夜影视在线观看| 高清日本欧美亚洲视频| 国产高清免费在线视频| 亚洲成av中文字幕| 亚洲国产精品成人久久动漫| 五月天亚洲精品综合网| Av资源站中文字幕| 国产一级二级三级亚洲| 日韩资源在线中文字幕| 美女诱惑福利在线视频| 免费熟女精品一区二区三区| 可以免费看啪啪啪的网站| 日本女护士久久精品| 在线免费看亚洲精品少妇69式| 成年人中文字幕视频网| 丰满的女教师bd视频| 漂亮人妻被强制中出| 亚洲少妇av在线播放| av网址在线观看日韩| 操人妻视频在线免费观看| 9797人人妻人人澡| 亚洲一区二区视频在线免费观看| 欧美视频精品免费观看| 婷婷av一区二区三区7| 91精品午夜呻吟xxxx| av一区二区三区蜜臀| 亚洲天堂欧美中文字幕| 日韩精品在线播放视频成年人| 亚洲妇熟xxxx妇色黄网站| 宝贝把腿张开让我添| 国产喷水在线免费观看| 99精产国品一二三产区网站| 午夜精品福利一区二区三区p| 怡红院精彩视频在线观看| av中文字幕高清在线| 天天爱天天日天天干天天做| 日韩一区二区视频在线看| 亚洲自偷自拍另类性受不了| 国产免费av不卡免费| av鲁丝一区鲁丝二区鲁丝四区| 日韩资源在线中文字幕| 久久久老熟女一区二区| 午夜在线小视频在线观看| 99久久99久久免费精品蜜臀| 欧美日韩精品久久一区二区三区| 自拍第一页免费视频| 午夜福利啪啪视频免费看| 青春草在线视频播放免费观看网站| 精品99久久久久久www| 二根鸡巴日一个穴视频| 国产av在线一区二区| 91精品国产国语自拈产在| 无套内谢少妇高潮毛片免费看| 伊人青操在线观看视频网站| 未满18禁止入内免费视频| 98视频在线免费观看| 成全视频免费观看在线下载| 国产熟女一区二区三区四| 欧美大长腿美女抽插网站| 亚洲天堂都市激情av| 日韩国产亚洲在线视频| 成人性生交大免费三人| 欧美精品黑人粗大破除| 97超碰在线视频观看| 国产精品福利免费视频不卡| 新婚人妻聚会被中出| 久久精品国产亚洲av视瓶 | 精产国品一二三产区999| 97电视剧在线观看免费完整版| 一区二区三区在线中国| 小少妇被大鸡巴操手机在播放| 国自产拍偷拍福利精品免费观看| 欧美激情在线观看新地址| 亚洲欧美另类激情综合区动漫| 日韩资源在线中文字幕| 在线观看国产精品123| 青青操在线视频精品| 欧美激情自拍2020| 美国黄色aa特黄色视拼| 熟女人妻人妻のhd| 日日天天干夜夜夜操狠狠干| 中国福利在线黄色片| 久草免费资源视频在线观看| 日韩精品高清免费视频| 丝袜美腿视频诱惑亚洲| 久久久亚洲精品熟妇少妇| 日本成人午夜电影视频| 久久精品在线观看免费视频| 天天插天天爱天天日| 国产精品视频白浆免费网站| 操白嫩人妻少妇真爽视频| 天天日天天添天天爽| 欧洲日韩视频一区二区三区| 少妇美女大极品内射| 亚洲国产精品成人久久动漫| av一av一av中文字幕| 久久久老熟女一区二区| 亚洲精品少妇久久久久久| 国产欧美日韩一区91| 国产国产午夜全部视频| 亚洲五区四区欧美视频| 亚洲综合另类小说色区色噜噜,| 可以直接在线观看的一区| 久久久久久久国产精品人妻| 国产超碰人人爽人人做夜色资源| 99热这里只有的精品666| 天堂av在线中文在线新版| 色欲天天天久久久综合| 亚洲国内自拍愉拍影音先锋| 亚洲精品成人a8198| 成人3d动漫一区二区三区91| 欧美亚洲天堂不卡视频| 少妇的激情夜夜爽爽爽爽爽| 乱一区二区三区在线播放| 26uuu天堂在线青青在线视频| 操人妻一区二区三区| 国产中文字幕在线免费播放| 97色婷婷久久99国产视频| 亚洲国产日韩欧美高清片vr| 亚洲图片,自拍偷拍| 在线视频你懂的视频| 午夜剧场欧美一区二区| 一区二区三区欧美高清| 久久久999精品在线| 无人码一区二区三区视频| 蜜桃aⅴ噜噜一区二区三区网址| 国产精品自拍亚洲春色| 91精品人妻中文字幕| 98视频在线免费观看| 人人妻人人妻人人妻精品| 少妇的激情夜夜爽爽爽爽爽| 男人的坤插进女人的屁股里的视频| 狠狠躁日日躁夜夜躁视频| 亚洲一级免费av黄色打炮片| 91久色porny视频在线| 久久一区二区三区杨幂| 韩日一级片中文字幕| 国产三级伦理在线观看| 大香蕉人妻少妇av| 国产乱人伦av麻豆网| 一区二区三区亚洲蜜桃| 欧美亚洲天堂不卡视频| 国内精品久久久久久久999| 人人妻在线视频97| 啪啪啪免费亚洲精品网站| 一区二区三区欧美高清| 亚洲天堂都市激情av| 日韩资源在线中文字幕| 亚洲天堂一二三四在线播放| 在线手机免费观看视频| 国产乱子伦一区=区三区| 大香蕉人妻少妇av| 黄色性网站免费观看| 久草视频免费在线视频观看| 免费av在线中文字幕| 99久久精品免费看蜜桃的推荐词| 人人妻人人妻人人妻精品| 久操视频精品在线观看| 少妇内射的视频一区二区| 9色自拍视频在线观看| 成人a毛片久久免费播放| r人人妻人人澡人人爽| av色哟哟国产精品| 韩国美女主播福利视频| 国产亚洲精品天堂在线观看| 亚洲午夜免费精品久久久| 农村女人91熟女熟妇| 男的扒开女的下面狂操视频| 日本很黄很黄的动态视频| 青青草手机视频在线观看| 激情综合网激情俺她去| 午夜精选视频在线观看| 青青青青青青青青青青青青青草| 中文字幕亚洲日韩第一页| 欧美亚洲天堂不卡视频| 人妻少妇偷人视频一| 一区二区三区精品视频| 两个人午夜免费看视频| 亚洲欧美在线色图动态图| 精品99久久久久久www| 真人同房直接做视频免费| 丝袜美腿视频诱惑亚洲| 天天操天天射天天综合网| 精品99久久久久久www| 亚洲真人性在线观看| 91九色porny国产探花| 干 白虎 少妇 嫩 逼 视频| 青青青青青青青青青青青青青草| 自拍第一页免费视频| 亚洲永久av午夜福利| 77777蜜臀精品久久综合| 污污污污国产免费入口处| 欧美日韩国产在线观看了| 天天干夜夜操日日操| 公一区二区三区高清99| 丝袜美腿视频诱惑亚洲| 亚洲天堂都市激情av| 91麻豆精品一二三区在线成人| 亚洲妇熟xxxx妇色黄网站| Av资源站中文字幕| 亚洲图片,自拍偷拍网| 92免费视频人妻网| 日韩欧美亚洲在线第一页| 欧美视频精品免费观看| 日韩av一区二区三区久久| 亚州 欧美日韩人妻熟女| 国产大神一区二区三区| 亚洲天堂 校园春色| caoporn香蕉在线观看| 麻豆精品午夜福利在线| av网站在线免费浏览| 制服丝袜诱惑综合网| 男生用大鸡巴捅女生的视频| 亚洲免费淫网站在线观看| 国产91精品久久久久高潮| 天天日天天添天天爽| 五月桃花网婷婷伊人久久| 一区二区三区四区免费福利视频 | 久草视频免费在线视频观看| 91精彩刺激对白露脸偷拍| 起碰97视频在线播放| 日韩美女精品一在线观看| 无人码一区二区三区视频| 教资是不是人人都可以考| 国产剧情星空无限传媒| 手机在线免费视频一区二区三区| 亚洲日本一区二区嫩草| 最新人妻熟女中文字幕| 999在线精品视频观看| 久久性视频不卡网站| 国产乱子伦一区=区三区| 欧美 亚洲 激情 自拍| 超碰超碰超碰超碰超碰情侣| 亚洲熟妇av一区二区蜜桃第1集| 91福利精品一区二区| 老司机免费福利视频网| 人妻寝取少妇乱中文字幕| 午夜偷拍福利小视频| 国产又粗又猛又爽又色视频| 亚洲无码精品中的精品| 五月天中文字幕剧情在线| 性色av一区二区三区观看| 亚洲欧美在线色图动态图| 91在线视频只有精品| 啪啪啪免费亚洲精品网站| 特黄特猛aaaaaaaaa片| 亚洲图色熟女五月天| 日本 久久久 香蕉| 亚洲国产中文字幕在线视频| 欧洲野外激情性视频| 人妻a∨在线中文字幕| www国产精品久久久久久| 操人妻免费视频观看| 国模视频写真一区二区| 69精品人妻一区二区| 美女诱惑福利在线视频| 爱人体-看人体人体摄影| 欧美熟妇亚洲中文不卡少妇| 古典武侠校园春色亚洲| 96h久久国产激情| 三级经典三级日本三级欧美| 久久久久国产一毛片高清| 美女诱惑福利在线视频| 欧美精品黑人粗大破除| 丰满的女教师bd视频| 91高清免费观看在线| 4455vw在线观看| 97久久精品熟女超碰| 亚洲一区二区成人综合| 欧美日韩国产在线观看了| 国产精品欧美日韩久久久免费观看| 在线免费观看欧美激情视频| 国产一区精品在线观看免费| 亚洲 欧洲 国产 麻豆| 超碰在线观看97视频| 青青操在线视频精品| 国产黄a三级三级三级三级三级 | 67194久久一区二区| 偷拍自拍视频图片免费| 男人爽爽女人的视频一区二区三区| 啊啊啊操死我轮操视频免费| 成年大片40分钟免费视频播放| 99久久夜色精品国产亚洲软件| 日本高清插阴视频免费| 亚洲中文字幕av在线播放| av 激情 开心 五月| 不卡精品国产_亚洲人成在线| 天天干夜夜操日日操| 最新亚洲成人黄色片| 婷婷综合尤物精品国产| 成年女人毛片免费在线播放| 日本伦理在线免费视频| 港台经典一级成人免费av| 成人午夜影视在线观看| 亚洲天堂精品区三区二区一区| 亚洲国产日韩a在线欧美2020| 91福利国产成人精品| 老男人久久青草av高清| 少妇人妻不满足中文字幕| 国产精品黄色自拍视频| 亚洲精品超熟女av| 国产成人啪精品视频免费| 麻豆一区二区大豆行情| 涩涩网站在线观看视频| 久精彩视频免费观看| 日韩精品高清免费视频| 国产精品啊啊啊不要在线观看| 黄色成人激情福利在线影院| 97超碰在线cao| 天天插天天爱天天日| 国产一级免费黄色录像片| 精品国产日韩一区三区| 亚洲精品超熟女av| 日韩中文字幕乱码一区| 国语对白xxxx乱大交| 天天插天天摸天天爱| mm在线视频观看免费观看| 4455vw在线观看| 丰满的女教师bd视频| 丝袜美图一区二区三区| 亚洲成年人三级电影| 最新亚洲成人黄色片| 国内精品久久久久久久999| aaa222男人天堂| 久操av在线免费观看| 欧美日韩aaaaa级黄片视频| 久re这里只有精品视频| 国产1区2区在线视频| 好吊视频一区二 区三区视频| 成av一区二区三区久久| 欧美日韩国产综合不卡| 69 久久99精品久久久| 女人被男人阳具抽插的呻吟视频 | 午夜精品福利一区二区三区p| 日韩av一区二区三区久久| 91精品在线播放hd| 天天操天天色天天天| 亚洲av一区视频在线观看| 大奶子美女免费操逼视频| 久久综合色——久久综合色88| 国产麻豆在线av| 亚洲国产精品国自产拍av在线| 成人黄色大全在线观看| 欧美在线免费污污视频| 一区二区三区四区不卡在线观看 | 中文字幕 日韩在线播放| 亚洲自偷自拍另类18p| 欧美精品乱码久久久久久| 免费成视频人免费91| 日韩欧美一区久久久久久| 亚洲熟妇av一区二区蜜桃第1集| 伊人青操在线观看视频网站| 男人插女人逼app| 67194久久一区二区| 亚洲图片一区偷拍自拍| 国内精品久久久久久久999| 欧美一区二区蜜桃视频| 亚洲视频 中文字幕 人妻| 国产精品黄色自拍视频| 未满18禁止入内免费视频| 91人妻精品一区二区三区在线| 精品无人区高清免费看| 爱人体-看人体人体摄影| 一区二区三区精品在线免费视频| 国产一区精品在线观看免费| 亚洲主要位于五带中的什么带? | 真人同房直接做视频免费| 粉嫩av入口一区二区三区| 国产剧情星空无限传媒| 美女被弄高潮喷水91视频9| 青青草成人免费电影| 天天操天天色天天天| 日本熟妇丰满厨房55| 日韩欧美亚洲在线第一页| 丝袜美腿视频诱惑亚洲| 中文一区二区三区精品视频| 天天日天天看天天摸| 亚洲自偷自拍另类18p| 亚洲精品专区一区二区| 欧美在线播放一二区不卡| 韩日一级片中文字幕| 偷窥老熟女久久久av| 东北老熟女疯狂作爱视频| 成人大片精品在线观看| 成人福利视频一区二区| 99热6在线播放免费| 丝袜av在线丝袜av天堂国产| 日本av高清免费观看| 日本福利片免费在线播放| 26uuu天堂在线青青在线视频| 97免费人妻超碰97在线| 人妻夜夜爽av性色大片| 亚洲精品在线观看高清资源| 日本免费播放一区二区三区| 在线理论国产高清在线| 99,九九,久久精品| 亚洲中文字幕av在线播放| 9色自拍视频在线观看| 在线高清视频你懂得| 日本av毛片在线播放| 国产又粗又猛又爽又色视频| 天天操天天色天天天| 在线观看av久久久| 欧美综合一区二区三区| 亚洲av综合久久久久久| 成人福利视频一区二区| 亚洲中文有码一区二区| 4455vw在线观看| 骚白虎插入在线观看| 日韩欧美一区久久久久久| 中国熟妇丰满大乳大屁股| 免费一级黄色片麻豆系列| 亚洲综合另类小说色区色噜噜,| 视频你懂得在线观看| 天天干天天操天天日天天射| 91大神视频在线观看视频| 大鸡巴操的好爽好舒服啊视频| 天天色天天操综合网| 日本 久久久 香蕉| 99热6在线播放免费| 97免费人妻超碰97在线| 天天睡天天摸天天添天天日天天射| aaa222男人天堂| 婷婷色综合久久五月天| 五月激情丁香久久亚洲| 天天天天拍天天天天天天| 视频在线播放一区二区| 91精品午夜呻吟xxxx| 亚洲av网站在线免费观看| 国产又大又粗又硬又爽视频| 日韩毛片基地免费看| 国产美女视频在线播放| 视频在线观看免费99| 午夜剧场欧美一区二区| 在线小视频,你懂的| 天天操天天射天天综合网| 99热6在线播放免费| 播放灌醉水嫩大学生国内精品 | 蜜臀 av一区二区| 欧美福利专区一区二区三区| 亚洲高清中文字幕在线的| 天天色天天情天天透| 中文字幕国产电影在线观看| 日本视频免费大片| 91精品在线播放hd| 国产又粗又长又黄视频| 亚洲综合久久综合网| 午夜精品不卡视频在线观看| 91久久精品视频91| 在线免费观看欧美激情视频| 色片网站在线看亚洲精品| 少妇高潮尖叫久久久久| 超碰人人澡人人碰人人| 三级经典三级日本三级欧美| 偷拍自拍 中文字幕| 91精选视频在线播放| 天天睡天天摸天天添天天日天天射 | 99,九九,久久精品| 中国熟妇丰满大乳大屁股| 日本性少妇xxxx| 97视频人人人人人性| 182tv在线福利视频| 公一区二区三区高清99| caoporn香蕉在线观看| 97精品国产高清在线| 手机在线免费视频一区二区三区 | 啪啪啪在线播放视频| aaa222男人天堂| 69精品人妻一区二区| 91精品综合国产熟女| 91精彩刺激对白露脸偷拍| 99久久99久久免费精品蜜臀| 熟女人妻av中文字幕| 色男人的天堂一区二区三区| 久久精品国产二区AV无码| 久久久久久久久毛片精品奶炮| 操女人下阴黄色一级视频| 日本中文字幕人妻一区二区 | 亚洲三级这里只有精品| 亚洲另类欧美在线观看| 亚洲av男人的天堂久久久| 亚洲国产日韩欧美高清片vr| av中文字幕高清在线| 男生日女生逼的视频| x8x8免费在线观看视频| 日韩资源在线中文字幕| 亚洲精品1234区在线看 | 手机在线免费视频一区二区三区| 国语对白xxxx乱大交| 天天日天天添天天爽| 亚洲另类熟女国产精品老| 熟女人妻av中文字幕| 播放灌醉水嫩大学生国内精品 | 99热这里只有的精品666| 亚洲自拍偷拍视频二区| 91福利精品一区二区| 啪啪男女日韩网站蜜桃| 99久久夜色精品国产亚洲软件| 久久一区二区三区杨幂| 中文字幕亚洲日韩第一页| 东北老熟女疯狂作爱视频| 日本熟妇wxw日本人妻| 最新人妻熟女中文字幕| 欧美一级操逼啊啊啊哦哦哦| 午夜剧场欧美一区二区| 91精品人妻中文字幕| 国产av综合av国产精品| 微拍一区二区在线观看| 午夜啪啪啪免费视频网站| 一区二区三区国产欧美日韩| 久久久国产视频91| 天天操天天射天天综合网| 天天大香蕉一区二区三区| 成人性生交大免费三人| 亚洲精品成人a8198| 91麻豆精品国产乱码久久久久久| 国产免费av不卡免费| 人人妻人人妻人人妻人人妻人人人| 青青草成人免费电影| 91精品综合国产熟女| 精品国产9999久久久久| 亚洲精品超熟女av| 免费直接观看的麻豆黄色| 伊人青青青在线观看| 日本免费啪啪啪啪啪啪啪啪啪啪| 日韩精品高清免费视频| 91福利精品一区二区| 黄色中文字幕在线观看| 亚洲视频专区在线播放| 中字av在线一区二区中字| 国产1区2区在线视频| 久久99精品国产99久久6尤| 国产在线视频国产资源| 久久久亚洲精品熟妇少妇| 大秀视频一区二区三区| 99麻豆精品国产自产在线观看| 亚洲精品**不卡在线播he| 瑟瑟的网站在线观看| 国产专区视频在线观看免费| 人妻精品久久久久中文字幕19| 69精品人妻一区二区| 一区二区三区国产欧美日韩| 亚洲无码精品中的精品| 99久久99久久免费精品蜜臀| 日本成人午夜电影视频| 中文字幕最新色片av| 色婷婷亚洲久久97成人| 最新日韩成人毛片在线| 欧美三级一区二区三区四区五区| 亚洲自拍偷拍清纯唯美| 在线免费观看欧美激情视频| 国产精品精品3d动漫| 国产一区三区四区五区| 亚洲中文字幕在线观看黑人| 男人天堂在线免费观看| 欧美日韩国产综合不卡| 婷婷爱在线视频精品| 日本免费播放一区二区三区 | 亚洲欧美动漫卡通 另类| 黑人精品一区a一二区b| 伊人精品在线大香蕉| 2022AV天堂免费在线观看| 日韩三级中文字幕熟女| 三级三级三级日本99| av鲁丝一区鲁丝二区鲁丝四区| 天天色天天干天天操| heyzo久久综合色88| 在线观看成人激情av| 99久久精品久久久久久清纯| 美女主播大奶子黄瓜插逼| av色哟哟国产精品| 中文字幕永久在线一区二区| 99久久精品美女高潮喷水| 富二代av一区二区| 天天色天天情天天透| 67194久久一区二区| 久操av在线免费观看| 男生用大鸡巴捅女生的视频| 好的一级毛片免费毛片直播| 欧美福利视频一二三| www国产精品久久久久久| 免费观看视频一区二区三区| 中文字幕看日韩精品视频| 狠狠躁日日躁夜夜躁2| 99热6在线播放免费| 国产剧情星空无限传媒| 国产精品自拍亚洲春色| 变态另类97人妻av| 在线观看国产影片| 在线观看免费黄片欧美| 天天日天天看天天摸| 黄色成人激情福利在线影院| 中文字幕一区三区二区国产黄色| 国产成人啪精品视频免费| 亚洲精品成人原创视频| 先锋资源在线观看国产精品| 日本五十路六十路中出| 91免费观看国产精品| 97色婷婷久久99国产视频| 日日爽夜夜爽夜夜爽精品视频| 午夜剧场欧美一区二区| 美女 激情 欧美 日韩| 99久久精品国产欧美一区二区| 大鸡巴操的好爽好舒服啊视频| 青青视频青青成人免费| 999热这里只有精品视频| 999在线精品视频观看| 亚洲人成小说网站色在线| 97免费人妻超碰97在线| 国产在线免播放器不卡| 日本大鸡巴乱伦肏屄网| 亚洲成年人三级电影| 亚洲天堂网久久av| 中文字幕av一区二区三区高| 美女诱惑福利在线视频| av男人天堂精品久久| 欧美视频一区二区三区在线观看| 日本高清插阴视频免费| 婷婷av一区二区三区7| 91人妻人人做人人爽九色全集| 99精品视频中文字幕| 亚洲av福利片久久久久| 最新人妻熟女中文字幕| 女人扒开逼逼让男人操| 日本电影高清一区二区| 91福利国产成人精品| 93乱子伦国产乱子伦| 一区二区三区四区不卡在线观看| 国产精品久久久久白浆| 97精品在线观看视频| 亚洲图色熟女五月天| 国产av一区二区三区天堂| 日韩三级中文字幕熟女| 涩涩网站在线观看视频| 黄色性网站免费观看| 男人的坤插进女人的屁股里的视频| 啪啪啪免费亚洲精品网站| 超碰在线97人人草| 97久久精品熟女超碰| 亚洲av欧美av在线播放| 国产老熟女高潮在线播放| 亚洲天堂欧美中文字幕| 99热这里只有的精品666| 日本公与妇电影三级| 国内精品久久久久久久| 精品人妻欧美一区二区| 久久这里精品视频3| 亚洲欧美另类激情综合区动漫| 一区二区三区极品人妻| 女人样男人用大鸡巴操她的逼逼| 操人妻视频在线免费观看| 性感的人妻在线观看| 欧美视频在线观看18| 日韩avapp在线| 美女 激情 欧美 日韩| 人妻熟一区二区三区四区不卡 | 日韩国产精品高清中文在线| 啪啪在线视频免费观看| 免费观看日本黄页网站| lisaann在线观看| 黄色av日韩免费在线观看| 亚洲免费观看高清在线| 大香蕉大香蕉在线播放| 国产av人人夜夜澡人人爽下载 | 好男人资源在线视频观看社区| 久草视频免费在线视频观看| 欧美va久久久噜噜噜久久| 日韩欧美在线不卡一区二区三区| 91久久综合九色综合欧美98| 精品熟女后入一区二区三区| 婷婷丁香花综合激情五月天| 未满18禁止入内免费视频| www久久久久久久99| 不卡一区二区啪啪视频| 男人天堂新在线电影| 99久久精品国产欧美一区二区| 伊人青操在线观看视频网站| 亚洲精品久久久久久久久久蜜桃| 五月天开心激情深爱激情| 老师让我插进去69AV| 熟女吧国产精品一区二区三区| 日本vvvv操操操| japanese五十路熟女熟妇| 日本一区二区不卡电影| 黄色中文字幕在线观看| 亚洲国产成人在线观看网址| 成人在线视频国产自拍| 2020精品国产自在现线官网| 日本公与妇电影三级| 久久99精品国产99久久6尤| 欧洲日本亚洲一区二区| 亚洲av永久久久久久久蜜桃| 久久精品视频全部视频在线| 人妻精品久久久久中文字幕19| 登录国产黄色一区二区三区| av中文字幕在线播放| www久久久久久久99| 在线视频你懂的视频| 大香蕉97精品一区二区三区| 一区二区中文字幕18| 亚洲av综合久久久久久| 欧美图色 亚洲图色| 一区二区人妻丝袜粉嫩| 日本熟妇wxw日本人妻| 精品视频在线视频精品| 成人黄色大片免费网站| 青青操在线视频精品| 少妇内射的视频一区二区| 亚洲免费国产在线日韩| 美女av网站在线观看| 筱田优在线播放一区二区三区| av手机在线免费播放| 好吊视频一区二 区三区视频 | 中文字幕黄色av网址| 中文字幕永久在线一区二区| 国产黄a三级三级三级三级三级| 欧美在线一区日韩国产| 亚洲图片,自拍偷拍| 亚洲午夜免费精品久久久| 国产高清在线免费视频| 午夜网在线观看视频| 99精品老司机免费视频| 一区二区三区精品视频| av蜜桃网在线观看| 麻豆精品午夜福利在线| 夜夜骑加勒比天天操| 日韩av中文字幕网址| 成人免费视频国产免费麻豆下| 999在线精品视频观看| 91九色在线视频网站| 日韩精品一区二区三区中文精| 91人妻精品一区二区三区在线| 狂野小农民在线高清| 亚洲精品乱码久久观看网| 国产亚洲精品天堂在线观看| 日韩avapp在线| 一区二区三区在线中国| 阿v视频在线观看免费播放| 午夜福利久久久国产视频| 亚洲视频综合在线播放| 中文字幕一区三区二区国产黄色| av蜜桃网在线观看| 91久久香蕉国产熟女| 东方av在线免费进入| 日韩精品在线播放视频成年人| 日本一区二区不卡电影| 黄色av日韩免费在线观看| 日本女护士久久精品| 天天日天天色天天摸| 天天日天天色天天摸| 在线中文字幕综合一区| 日本高清插阴视频免费| 日日天天干夜夜夜操狠狠干| 富二代av一区二区| julia 人妻中文字幕| 国产av人人夜夜澡人人爽下载 | 中文有码一区二区三区| 免费av区在线观看| 老鸭窝在线视频国产| 日本日本熟妇中文在线视频| 教资是不是人人都可以考| 大香蕉伊人免费在线| 草逼美女逼话多的视频出水| 色综合久久激情综合久久| 微拍一区二区在线观看| 手机能看的黄色av| 亚洲无码成人福利视频| 免费无码专区毛片高潮喷水 | 亚洲日本一区二区嫩草| 亚洲免费观看高清在线| 中文一区二区三区精品视频| 免费阿v视频在线播放| 人妻夜夜爽av性色大片| 亚洲综合欧美熟一区| 国产午夜福利精品久久不卡| 老鸭窝在线视频国产| 亚洲自偷自拍另类18p| 性感丝袜美女诱惑大鸡吧| 女人被男人阳具抽插的呻吟视频| 亚洲av综合久久久久久| 欧美色一区二区三区在线观看 | 成人大片免费看45分钟| 国产精品亚洲综合av| 男女啪啪啪网站入口| 午夜性色福利视频自拍偷拍| 精品人妻欧美一区二区| 色婷婷亚洲久久97成人| 97人妻人人做人碰人人爽一| 92免费视频人妻网| 亚洲永久av午夜福利| 精品岛国产熟女人妻欲求不满| 99久久夜色精品国产亚洲软件| 精品一区二区三区四区激情| 午夜在线小视频在线观看| 男生用大鸡巴捅女生的视频| 少妇内射的视频一区二区| 99久在线精品99re8热视频 | 亚洲天堂av插插插| 99久久精品国产欧美一区二区| 96人妻一区=区三区| 亚洲人人妻一区二区三区| 五月激情四射丁香婷婷激情四射| 天天插天天爱天天日| 五月天开心激情深爱激情| 亚洲三级伦理在线播放| 成人一级黄色片免费看| 天天日天天日天天日天天干| 不卡一区二区啪啪视频| 日本免费播放一区二区三区| 麻豆一区二区大豆行情| 国产高清在线免费视频| 蜜桃视频18在线观看| 国产精品自拍亚洲春色| caoporn香蕉在线观看| 一区二区三区在线中国| 嗯嗯嗯啊啊啊不要好爽视频| 亚州 欧美日韩人妻熟女| 久久精品亚洲国产| 亚洲天堂精品区三区二区一区| 91精品国产综合久久婷婷香蕉| 免费av区在线观看| aaa222男人天堂| 成人熟女一区二区三区| 国产老熟女高潮在线播放| 2022AV天堂免费在线观看| 91嫩草精品少妇97九九| 日本女护士久久精品| 日韩精品在线播放视频成年人 | 手机视频在线观看99精品视频| 熟女免费在线观看视频 | 美女的逼让男人桶的视频| 91福利精品一区二区| 青青草成人免费电影| 99国国视频在线播放| 日本黄页网络站免费| 嗯~啊~好舒服在线观看| 大肉大捧一进一出免费视频网址| 丁香激情五月天综合网| 亚洲一区二区三区免费| 欧美精品日韩第一页| 午夜网在线观看视频| 欧美激情在线观看新地址| 瑟瑟的网站在线观看| 午夜精品久久99蜜桃| 天天色天天情天天透| 搡四十路e五十路熟女av| 黑人熟女一区二区三区| 26uuu天堂在线青青在线视频| 天天插天天摸天天爱| 99精品私筹模特大尺度视频| 成人教育 在线学习| 成人午夜伦理在线观看| 中文字幕av网址大全| 欧美亚洲国产校园春色| 欧美在线一区日韩国产| av男人免费的天堂| r人人妻人人澡人人爽| 中文字幕久久精品亚洲乱码| 人妻少妇精品视频专区vr| 综合另类小说欧美另类图片| 中文字幕日本一本二本三区| 伊人精品在线大香蕉| 欧美一区二区蜜桃视频 | 国产粉嫩粉嫩的在线18观看| 精品岛国产熟女人妻欲求不满| 免费观看视频一区,二区,三区| 97偷偷碰在线视频| 风间由美亚洲一区二区三区| 91精品国产自产在线大长腿| 婷婷综合尤物精品国产| 久久三级片一区二区毛片| 极品国模sm镣铐调教| 掀开奶罩边吃边摸下娇喘视频| 久国产一二三区四区乱码2021| 国产午夜福利精品久久不卡| 国产美女遭高潮免费视频| 国产一线女人天堂av| 97国产婷婷在线观看| 少妇人妻不满足中文字幕| 国产精品午夜在线观看| 人妻少妇偷人视频一| 久操视频精品在线观看| 国产在线视频国产资源| 在线观看免费黄片欧美| 大肉大捧一进一出免费视频网址| 92免费视频人妻网| 日韩精品一区二区三区中文精| 亚洲欧美 在线视频| 久久精品国产亚洲av视瓶 | 一区二区三区欧美日韩电影| 精品人妻欧美一区二区| 国产日韩欧美精品久久久一区二区| 亚洲视频综合在线播放| 久久91精品国产91久久分享| 操女人下阴黄色一级视频| 亚洲国产成人在线观看网址| 天天色天天干天天操| 欧洲av性色在线看| 国产精品亚洲综合av| 美女诱惑福利在线视频| 国产av综合av国产精品| 偷窥中国丰满多毛老熟女| 亚洲 欧美在线视频| 高清日本欧美亚洲视频| 国产高清免费在线视频| 中文字幕国产电影在线观看| 免费无码专区毛片高潮喷水| 亚洲三级这里只有精品| 日韩欧美在线不卡一区二区三区| 精品一区二区三区大全| 欧美1234不卡视频| 黄色 成年人 免费观看| 成av一区二区三区久久| 国产午夜福利精品久久不卡| 91在线视频只有精品| 男的扒开女的下面狂操视频| 白峰美羽在线观看av| 亚洲av福利片久久久久| 亚洲图色熟女五月天| 999在线视频一区二区三区| 两个人午夜免费看视频| 日日夜夜狠狠干干亚洲| 天天操天天色天天天| 内射一对幼嫩无毛妹| 五月激情丁香久久亚洲| 51日日夜夜精品视频| 最新人妻熟女中文字幕| 92免费视频人妻网| lisaann在线观看| 东方av在线免费进入| 人妻天天爽夜夜爽麻豆av| 国产av一区二区三区天堂| 爆操性感美女性色av| 免费熟女精品一区二区三区| 欧洲日本亚洲一区二区| 大香蕉97精品一区二区三区| 日韩精品高清免费视频| 欧美成人a v在线| 日本a爱视频二区三区| 操白嫩人妻少妇真爽视频| 一区二区三区在线中国| 男生日女生逼的视频| 亚洲av综合久久久久久| japanese五十路熟女熟妇| 五月激情四射丁香婷婷激情四射| 人妻天天操avxx| 不卡一区二区啪啪视频| 久久这里精品视频3| 国产又黄又粗又硬又大又猛的视频| 美女诱惑福利在线视频| 91在线免费观看成人| av蜜桃网在线观看| 狂野黑人性猛交xxxxxx| 最新人妻熟女中文字幕| 亚洲综合欧美熟一区| 91精品午夜呻吟xxxx| 久久精品视频全部视频在线| 欧美熟妇亚洲中文不卡少妇 | 99精品视频在线观看专区| 91表用白丝脚帮我脚交| 女人张开双腿让男人捅视频| 超级碰碰碰97免费视频97| 三上悠亚和黑人665番号| 无套内谢少妇高潮毛片免费看 | 欧美,日本中文高清视频| 日韩国产亚洲在线视频| 亚洲av好看xx站| 午夜在线小视频在线观看| 青青操成人免费在线视频| 日本av毛片在线播放| 日韩性爱视频无码三级片| 1777中文字幕字幕在线播放| 中国福利在线黄色片| 青青操在线视频精品| Av资源站中文字幕| 爆操嫩逼黑丝袜美女小骚逼| 97视频人人人人人性| 激情综合网激情俺她去| 最大最全av中文字幕网| 亚洲人成亚洲人成在线观看com| 国产精品午夜在线观看| www国产精品久久久| 亚洲自偷自拍另类性受不了| 人妻天天操avxx| 欧美色一区二区三区在线观看| 不卡一区二区啪啪视频| 精品视频在线视频精品| 国产三级av在线免费观看| 午夜啪啪啪免费视频网站| 日韩毛片基地免费看| 老鸭窝在线视频国产| 大秀视频一区二区三区| 99精品私筹模特大尺度视频| 成人激情在线一区二区| 亚洲福利导航在线视频| x8x8免费在线观看视频| 男女精品久久久久久久久久| 亚洲自偷自拍另类18p| 亚洲综合另类小说色区色噜噜,| 青青草原亚洲精品在线观看| 天天操天天操天天干天天| 亚洲图色熟女五月天| 亚洲精品**不卡在线播he| 丝袜美图一区二区三区| 99精品视频在线观看专区| 欧美大长腿美女抽插网站| 亚洲偷偷自拍视频网| 中文字幕最新色片av| 亚洲自拍偷拍视频二区| 伊人青青青在线观看| 一区二区三区欧美日韩电影| 极品人妻vide0sss人妻| 久久综合色——久久综合色88| 欧美一区二区三区乱轮| 欧美黑人性色黄在线视频| 自拍分享国产亚洲欧美| 深夜亚洲精品免费福利你懂的| 亚洲天堂男人的天堂av| 免费在线观看网址你懂的| 国产又粗又长又黄视频| 国产女人露脸高潮对白视频| 欧美亚洲国产校园春色| 亚洲精品少妇久久久久久| 99久久精品久久久久久清纯| 国产熟女一区二区三区四| 国产美女高清免费av| 天天色天天操综合网| 成人3d动漫一区二区三区91| 亚洲人体艺术二区三区视频| 部长侵犯人妻一区二区三区| 亚洲国产精品美女久久久av | 18人妻人碰人人做人人爽| 天天碰天天摸人人看| 中文字幕国产电影在线观看| 99久久精品久久久久久清纯| 免费二区三区四区在线观看| 欧美视频在线观看18| 天天色天天爱天天日| 1717精品视频在线观看| 丝袜美腿色诱视频在线观看| 人妻熟一区二区三区四区不卡 | 国语对白xxxx乱大交| 女人看了很爽的一级女毛片| 99热6在线播放免费| 精品久久久久aⅴ一区二区| 亚洲精品久久久久久久久久蜜桃| 中文在线字幕第一页| 成人a毛片久久免费播放| av一区二区三区蜜臀| 一区二区三区四区免费福利视频 | 国产精品黄色自拍视频| 亚洲美女乱1区2区3区| 亚洲国产精品av久久久| 91嫩草精品少妇97九九| 起碰97视频在线播放| 草逼美女逼话多的视频出水| 都市激情校园春色av| 男人的坤插进女人的屁股里的视频| 激情综合网激情俺她去| 女人张开双腿让男人捅视频| 91久久香蕉国产熟女| 办公室被吃奶好爽在线观看视频 | 午夜老司机福利一二三区| lisaann在线观看| 青青操国产精品视频在线| 国产大神一区二区三区| 成人黄色大片免费网站| 夜夜操夜夜操夜夜爽| 亚洲欧美日韩不卡人妻中文字幕| 久久性视频不卡网站| 国产剧情星空无限传媒| 好男人资源在线视频观看社区| 久久精品在线观看免费视频| 26uuu天堂在线青青在线视频| 欧美,偷拍,另类,综合| 亚洲国产精品成人久久动漫| 可以免费看的黄页视频| 国产伦精品一区二区黑人| 91大屁股人妻porn| 男人天堂地址在线播放| 狠狠躁日日躁夜夜躁视频| 亚洲精品成人原创视频| 欧美午夜不卡一区二区三区| 亚洲成人一区二区三区av| 偷拍自拍视频图片免费| 免费观看视频一区二区三区| 午夜国产福利视频一区二区| 五月婷婷免费在线观看视频| 国产女人露脸高潮对白视频| 9l九色自拍蝌蚪9l视频| 亚洲综合久久综合网| 两个人午夜免费看视频| 日韩资源在线中文字幕| 1717精品视频在线观看| 播放灌醉水嫩大学生国内精品 | 国产超碰人人爽人人做夜色资源| 老鸭窝在线观看免费观看高清版 | 黄色免费2b网页18岁有声音| 性色av一区二区三区观看| 免费阿v视频在线播放| r人人妻人人澡人人爽| 亚洲人人妻一区二区三区| 手机在线免费视频一区二区三区| 成人大片精品在线观看| 港台经典一级成人免费av| 特黄特猛aaaaaaaaa片| 掀开奶罩边吃边摸下娇喘视频| 亚洲精品 国产成人| 97电视剧在线观看免费完整版| 九月丁香婷婷中文字幕| 国产黑色丝袜视频在线观看下| 日本黄色操碌缬巴| 中文在线字幕第一页| 亚洲天堂 校园春色| 亚洲一区二区三区邪恶成人| 瑟瑟的网站在线观看| 人妻夜夜爽av性色大片| 欧美色一区二区三区在线观看 |