日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

vue学习—Convert HTML string to AST,如何将html字符串转换为ast数组结构

發布時間:2025/3/15 HTML 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue学习—Convert HTML string to AST,如何将html字符串转换为ast数组结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獲取html字符串

首先在入口文件處,使用template屬性或者el屬性獲取到需要解析的html字符串

template

1.html字符串,如

Vue.component('alert-box', {template: `<div class="demo-alert-box"><strong>Error!</strong><slot></slot></div>` })

2.如果值以 # 開始,則它將被用作選擇符,并使用匹配元素的 innerHTML 作為模板

el

類型:string | Element
通過el獲取需要解析的模版

export function query (el: string | Element): Element {if (typeof el === 'string') {const selected = document.querySelector(el)if (!selected) {process.env.NODE_ENV !== 'production' && warn('Cannot find element: ' + el)return document.createElement('div')}return selected} else {return el} }

解析html字符串

通過while循環結合正則表達式逐步匹配拆解html字符串

匹配注釋與html聲明文件

// Comment:// 添加在root元素下面的comment會被忽略if (comment.test(html)) {const commentEnd = html.indexOf('-->')if (commentEnd >= 0) {if (options.shouldKeepComment) {options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3)}advance(commentEnd + 3)continue}}// http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment// ie commentif (conditionalComment.test(html)) {const conditionalEnd = html.indexOf(']>')if (conditionalEnd >= 0) {advance(conditionalEnd + 2)continue}}// Doctype:// match const doctypeMatch = html.match(doctype)if (doctypeMatch) {advance(doctypeMatch[0].length)continue}

匹配標簽起始位置

匹配標簽起始位置,startTagOpen匹配到,但是startTagClose匹配失敗,那么失敗前的html片段就會被拋棄。

const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z${unicodeLetters}]*` const qnameCapture = `((?:${ncname}\\:)?${ncname})` const startTagOpen = new RegExp(`^<${qnameCapture}`) /** 解析起始標簽,使用正則匹配attrs,并將匹配到的正則數組放到attrs數組里面 */function parseStartTag () {// 標簽名const start = html.match(startTagOpen)if (start) {const match = {tagName: start[1],attrs: [],start: index}advance(start[0].length)let end, attr// 解析attrwhile (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {attr.start = indexadvance(attr[0].length)attr.end = indexmatch.attrs.push(attr)}if (end) {// 是否匹配到自閉合符號/,匹配到則設置標志屬性unarySlash='/'match.unarySlash = end[1]advance(end[0].length)match.end = indexreturn match}}}
  • 匹配函數首先匹配標簽起始位置,匹配失敗則返回進入下一步。
  • 匹配成功則創建match對象,tagName為匹配到的標簽名。然后切割html字符串,進行下一步匹配。
  • 通過while循環,匹配起始標簽上的attr,動態attr,將匹配到的正則放入attrs數組。
  • 最后匹配起始標簽結束符const startTagClose = /^\s*(\/?)>/
  • 匹配成功,則根據是否匹配到自閉合標志/來給unarySlash屬性賦值,最后返回match對象,進行下一步處理。

進一步處理macth對象

/** 解析上一步獲取的正則attrs,保存為{name, value}格式,* 并且將被瀏覽器轉譯的換行或特殊字符或者href里面的換行反轉為相應符號,* 最后將tagname,attrs等傳遞給調用函數的start函數 */function handleStartTag (match) {const tagName = match.tagNameconst unarySlash = match.unarySlashif (expectHTML) {// 如標題標簽,不應該被p標簽包裹,如果父級標簽是p,則提前閉合這個p標簽if (lastTag === 'p' && isNonPhrasingTag(tagName)) {parseEndTag(lastTag)}// 如果是可以自閉合的標簽,上個標簽和現在的標簽一樣,則閉合上一個標簽if (canBeLeftOpenTag(tagName) && lastTag === tagName) {parseEndTag(tagName)}}const unary = isUnaryTag(tagName) || !!unarySlashconst l = match.attrs.lengthconst attrs = new Array(l)for (let i = 0; i < l; i++) {const args = match.attrs[i]// 優先獲取匹配到的第三個正則捕獲const value = args[3] || args[4] || args[5] || ''const shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'? options.shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesattrs[i] = {name: args[1],value: decodeAttr(value, shouldDecodeNewlines)}if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {attrs[i].start = args.start + args[0].match(/^\s*/).lengthattrs[i].end = args.end}}// 非自閉合標簽,存入stack數組if (!unary) {stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end })// 1.修改lastTag,保存堆中的最上層數組項lastTag = tagName}// 將【匹配到的元素返回給上一級解析if (options.start) {options.start(tagName, attrs, unary, match.start, match.end)}}

start函數解析標簽起始對象

createASTElement

export function createASTElement (tag: string,attrs: Array<ASTAttr>,parent: ASTElement | void ): ASTElement {return {type: 1,tag,attrsList: attrs,attrsMap: makeAttrsMap(attrs),rawAttrsMap: {},parent,children: []} } start (tag, attrs, unary, start) {// check namespace.// inherit parent ns if there is oneconst ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag)// handle IE svg bug/* istanbul ignore if */if (isIE && ns === 'svg') {attrs = guardIESVGBug(attrs)}// 將傳入的數據轉化成ast對象 type=1let element: ASTElement = createASTElement(tag, attrs, currentParent)if (ns) {element.ns = ns}if (process.env.NODE_ENV !== 'production') {if (options.outputSourceRange) {element.start = startelement.rawAttrsMap = element.attrsList.reduce((cumulated, attr) => {cumulated[attr.name] = attrreturn cumulated}, {})}attrs.forEach(attr => {if (invalidAttributeRE.test(attr.name)) {warn(`Invalid dynamic argument expression: attribute names cannot contain ` +`spaces, quotes, <, >, / or =.`,{start: attr.start + attr.name.indexOf(`[`),end: attr.start + attr.name.length})}})}if (isForbiddenTag(element) && !isServerRendering()) {element.forbidden = trueprocess.env.NODE_ENV !== 'production' && warn('Templates should only be responsible for mapping the state to the ' +'UI. Avoid placing tags with side-effects in your templates, such as ' +`<${tag}>` + ', as they will not be parsed.',{ start: element.start })}// apply pre-transforms // 提前解析 <input :type='type' v-model='input' />for (let i = 0; i < preTransforms.length; i++) {element = preTransforms[i](element, options) || element}// v-pre checkif (!inVPre) {processPre(element)if (element.pre) {inVPre = true}}// pre tagif (platformIsPreTag(element.tag)) {inPre = true}// 如果是帶有pre屬性,跳過解析if (inVPre) {// el.attrslist => el.attrsprocessRawAttrs(element)} else if (!element.processed) {// structural directives// 解析v-for= “item in items”,生成element.for,element.alias,element.iteprocessFor(element)// 解析v-if,v-else-if,v-else;v-ifprocessIf(element)// element.once v-once用于渲染一次組件processOnce(element)}// 第一個start tag 為rootif (!root) {root = elementif (process.env.NODE_ENV !== 'production') {// 不能使用slot,template,v-for在root上checkRootConstraints(root)}}// 非自閉合if (!unary) {// last <=> currentParent = element []currentParent = elementstack.push(element)} else {closeElement(element)} }

processIf

/** 如果解析到v-if,給element增加if對象,如果解析到else或者v-else-if,* 標記,等到標簽閉合的時候做處理。*/ function processIf (el) {const exp = getAndRemoveAttr(el, 'v-if')if (exp) {el.if = expaddIfCondition(el, {exp: exp,block: el})} else {if (getAndRemoveAttr(el, 'v-else') != null) {el.else = true}const elseif = getAndRemoveAttr(el, 'v-else-if')if (elseif) {el.elseif = elseif}} }

解析純文本

let text, rest, next // 包含 < plain text的情況 if (textEnd >= 0) {rest = html.slice(textEnd) // 包含匹配到的<// 直到匹配到下一個結束、起始、注釋、條件注釋為止while (!endTag.test(rest) &&!startTagOpen.test(rest) &&!comment.test(rest) &&!conditionalComment.test(rest)) {// < in plain text, be forgiving and treat it as text// 文本里面的<作為普通字符,匹配下一個<next = rest.indexOf('<', 1)if (next < 0) breaktextEnd += nextrest = html.slice(textEnd)}// 獲取匹配到的純文本text = html.substring(0, textEnd) }if (textEnd < 0) {text = html }if (text) {advance(text.length) }// 處理純文本 if (options.chars && text) {options.chars(text, index - text.length, index) }

chars函數處理文本

chars (text: string, start: number, end: number) {// 父元素外面的text,或者template是純text,都被被忽略if (!currentParent) {if (process.env.NODE_ENV !== 'production') {if (text === template) {warnOnce('Component template requires a root element, rather than just text.',{ start })} else if ((text = text.trim())) {warnOnce(`text "${text}" outside root element will be ignored.`,{ start })}}return}// IE textarea placeholder bug/* istanbul ignore if */if (isIE &&currentParent.tag === 'textarea' &&currentParent.attrsMap.placeholder === text) {return}const children = currentParent.childrenif (inPre || text.trim()) {text = isTextTag(currentParent) ? text : decodeHTMLCached(text) // 轉譯html里面的特殊字符} else if (!children.length) {// remove the whitespace-only node right after an opening tagtext = ''} else if (whitespaceOption) {if (whitespaceOption === 'condense') {// in condense mode, remove the whitespace node if it contains// line break, otherwise condense to a single spacetext = lineBreakRE.test(text) ? '' : ' '} else {text = ' '}} else {text = preserveWhitespace ? ' ' : ''}if (text) {if (whitespaceOption === 'condense') {// condense consecutive whitespaces into single spacetext = text.replace(whitespaceRE, ' ')}let reslet child: ?ASTNodeif (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {// 含有動態文本文本child = {type: 2,expression: res.expression,tokens: res.tokens,text}} else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {// 填入text(不含動態文本),或者填入單一一個' '(有則不再填入child = {type: 3,text}}if (child) {if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {child.start = startchild.end = end}// 將文本加入父元素的childrenchildren.push(child)}} }

parseText

// preText?_s(_f(text))+lastText? // 純文本返回undefined export function parseText (text: string,delimiters?: [string, string] ): TextParseResult | void {const tagRE = delimiters ? buildRegex(delimiters) : defaultTagREif (!tagRE.test(text)) {return}const tokens = []const rawTokens = []let lastIndex = tagRE.lastIndex = 0let match, index, tokenValuewhile ((match = tagRE.exec(text))) {index = match.index// push text tokenif (index > lastIndex) {rawTokens.push(tokenValue = text.slice(lastIndex, index))tokens.push(JSON.stringify(tokenValue))}// tag tokenconst exp = parseFilters(match[1].trim())tokens.push(`_s(${exp})`)rawTokens.push({ '@binding': exp })lastIndex = index + match[0].length}if (lastIndex < text.length) {rawTokens.push(tokenValue = text.slice(lastIndex))tokens.push(JSON.stringify(tokenValue))}return {expression: tokens.join('+'),tokens: rawTokens} }

解析標簽字符串

// End tag: // stack為空匹配到的結尾標簽,除了</br>, </p>都會被忽略 const endTagMatch = html.match(endTag) if (endTagMatch) {const curIndex = indexadvance(endTagMatch[0].length)// 匹配到的正則,start,endparseEndTag(endTagMatch[1], curIndex, index)continue }

parseEndTag

function parseEndTag (tagName, start, end) {let pos, lowerCasedTagNameif (start == null) start = indexif (end == null) end = index// Find the closest opened tag of the same typeif (tagName) {lowerCasedTagName = tagName.toLowerCase()for (pos = stack.length - 1; pos >= 0; pos--) {if (stack[pos].lowerCasedTag === lowerCasedTagName) {break}}} else {// If no tag name is provided, clean shoppos = 0}if (pos >= 0) {// Close all the open elements, up the stack,關閉匹配到的標簽之后的所有未閉合標簽for (let i = stack.length - 1; i >= pos; i--) {if (process.env.NODE_ENV !== 'production' &&(i > pos || !tagName) &&options.warn) {options.warn(`tag <${stack[i].tag}> has no matching end tag.`,{ start: stack[i].start })}if (options.end) {options.end(stack[i].tag, start, end)}}// Remove the open elements from the stackstack.length = poslastTag = pos && stack[pos - 1].tag} else if (lowerCasedTagName === 'br') {if (options.start) {options.start(tagName, [], true, start, end)}} else if (lowerCasedTagName === 'p') {// 左邊自閉合,如果是p標簽,輔助閉合if (options.start) {options.start(tagName, [], false, start, end)}if (options.end) {options.end(tagName, start, end)}}}

end

end (tag, start, end) {const element = stack[stack.length - 1]// pop stackstack.length -= 1currentParent = stack[stack.length - 1]if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {element.end = end}closeElement(element) }

closeElement

function closeElement (element) {// 清除空的子節點trimEndingWhitespace(element)if (!inVPre && !element.processed) {element = processElement(element, options)}// tree management 元素閉合之后,stack為空,且該元素不為root,則查看該元素是否有if或者else-if標簽// 有,則給root增加if對象,無則拋棄if (!stack.length && element !== root) {// allow root elements with v-if, v-else-if and v-elseif (root.if && (element.elseif || element.else)) {if (process.env.NODE_ENV !== 'production') {checkRootConstraints(element)}addIfCondition(root, {exp: element.elseif,block: element})} else if (process.env.NODE_ENV !== 'production') {warnOnce(`Component template should contain exactly one root element. ` +`If you are using v-if on multiple elements, ` +`use v-else-if to chain them instead.`,{ start: element.start })}}// 根元素下面的標簽,閉合后,作為父元素的child插入if (currentParent && !element.forbidden) {if (element.elseif || element.else) {// 存在v-else-if,或者v-else,與同級v-if元素綁定processIfConditions(element, currentParent)} else {if (element.slotScope) {// scoped slot// keep it in the children list so that v-else(-if) conditions can// find it as the prev node.const name = element.slotTarget || '"default"';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element}currentParent.children.push(element)element.parent = currentParent}}// final children cleanup// filter out scoped slotselement.children = element.children.filter(c => !(c: any).slotScope)// remove trailing whitespace node againtrimEndingWhitespace(element)// check pre stateif (element.pre) {inVPre = false}if (platformIsPreTag(element.tag)) {inPre = false}// apply post-transformsfor (let i = 0; i < postTransforms.length; i++) {postTransforms[i](element, options)}}

最后解析出來的ast數組大致如下:

總結

以上是生活随笔為你收集整理的vue学习—Convert HTML string to AST,如何将html字符串转换为ast数组结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国内免费久久久久久久久久久 | 日日操天天爽 | 精品1区2区 | 国产一区二区三区四区在线 | 欧美天堂视频在线 | 国产精品2019 | 日韩av免费在线电影 | 久久伊人热 | 精品国产视频一区 | 久久九精品 | 在线视频a | 91在线视频在线观看 | 亚洲人精品午夜 | 91高清完整版在线观看 | 免费看一级特黄a大片 | 在线观看视频你懂 | 亚洲免费永久精品国产 | 日韩欧美一区二区三区视频 | 久草网在线观看 | 91看片淫黄大片91 | 在线国产不卡 | 九月婷婷人人澡人人添人人爽 | 91在线一区二区 | 色婷婷成人网 | 成人免费网视频 | 欧美激情视频一二区 | 最近中文字幕国语免费av | 成人黄大片视频在线观看 | 少妇搡bbbb搡bbb搡aa | 99久久婷婷国产精品综合 | 亚洲另类视频在线观看 | 黄色成人免费电影 | 午夜在线日韩 | 日韩成人免费电影 | 欧美激情视频一区二区三区 | 日韩精品一区在线播放 | 毛片网站在线 | 中文在线字幕免费观 | 成人免费在线视频 | 久久人网 | 欧美久久久久久久久中文字幕 | 久久久亚洲麻豆日韩精品一区三区 | 九九热re | www.亚洲视频 | 国产精品乱码一区二区视频 | 在线亚洲激情 | 色噜噜日韩精品一区二区三区视频 | 9在线观看免费高清完整版 玖玖爱免费视频 | 欧美日韩在线观看视频 | 久久久久99精品国产片 | 国产在线视频导航 | 久久久久免费电影 | 国产在线观看99 | 国产精品99在线播放 | 国产白浆视频 | 香蕉视频4aa | 亚洲视频在线播放 | 亚洲视频精品在线 | 欧洲性视频 | 玖草在线观看 | 欧美在线视频免费 | 色姑娘综合天天 | 国产精品专区在线观看 | 四虎永久视频 | 国产精品都在这里 | 国产区精品 | 中文字幕一区av | 黄网av在线 | 激情www| 久草在线视频资源 | 在线精品亚洲一区二区 | 天天天干天天射天天天操 | 亚洲va欧美va国产va黑人 | 91禁看片| 在线色网站 | 欧美亚洲一级片 | 99热这里只有精品国产首页 | 99在线观看免费视频精品观看 | 00av视频 | 天天操月月操 | 国产亚洲在线 | 欧美性猛片,| 日韩一级片观看 | 超碰97免费| 精品福利在线观看 | 日本精品一区二区三区在线观看 | 高清久久久久久 | 欧美久久电影 | 日韩欧美视频免费在线观看 | 91精品入口 | 亚洲午夜在线视频 | 成人黄色免费在线观看 | 日韩av快播电影网 | 亚洲日本色 | 久久短视频 | 中文字幕av在线免费 | 久久99精品久久只有精品 | wwxxxx日本 | 成人91免费视频 | 成人在线视频免费看 | 美女视频网 | 天天曰| 日韩久久精品 | 性色va| 欧美久久久 | 国产乱老熟视频网88av | 国产视频一级 | 成人一级黄色片 | 国产剧情一区二区在线观看 | 国产最新在线观看 | 国产成人精品综合久久久久99 | 亚洲精品国产第一综合99久久 | 亚洲精品中文字幕在线 | 永久免费毛片在线观看 | 亚洲人在线7777777精品 | 二区三区在线 | 亚洲综合在线播放 | 免费成人黄色 | 999国产在线 | 人人干人人添 | 午夜黄色一级片 | 国产免费亚洲高清 | 久久99偷拍视频 | 国产精品自产拍在线观看中文 | 精品在线一区二区三区 | 色全色在线资源网 | 国产精品久久久久久久久久妇女 | 丁香婷婷综合色啪 | 成年人在线免费看视频 | 天天操天天干天天插 | 看v片 | 久草在线视频在线 | 日产乱码一二三区别在线 | 成人黄色片在线播放 | 五月天激情开心 | 久久公开免费视频 | 亚洲国产精彩中文乱码av | 久久人人97超碰com | 国产91学生粉嫩喷水 | 网址你懂的在线观看 | 日韩成人免费观看 | 婷婷伊人综合亚洲综合网 | 亚洲v欧美v国产v在线观看 | 99视频偷窥在线精品国自产拍 | 欧美日韩视频免费 | 亚洲国产精品99久久久久久久久 | 婷婷在线视频观看 | 97av在线视频免费播放 | 一区二区三区福利 | 日韩有码中文字幕在线 | 国产在线久草 | 99久久99久久精品国产片 | 亚洲作爱 | 精品在线视频播放 | 岛国大片免费视频 | 日韩在线免费观看视频 | 午夜91视频 | 午夜精品电影一区二区在线 | 国产精品精品国产 | 91chinesexxx | 久久综合久久综合久久综合 | 国产精品激情在线观看 | av在线网站大全 | 欧美精品少妇xxxxx喷水 | 国产精品小视频网站 | 丁香午夜婷婷 | 日韩在线观看a | 中文字幕91视频 | 一区二区视频电影在线观看 | 日批在线观看 | 99免费在线视频观看 | 97超级碰| av福利在线播放 | 国产最新视频在线 | 91插插影库| 久久99免费视频 | 狠狠色丁香婷婷综合欧美 | 久久草草影视免费网 | 黄a在线 | 精品久久久久久久久亚洲 | 五月婷婷av | 久久精品中文字幕一区二区三区 | 日韩成人精品一区二区 | 国产一卡久久电影永久 | av片在线看 | 黄网站色欧美视频 | 高清在线一区二区 | 亚洲高清激情 | 美女av免费看 | 亚洲国产免费 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产免费亚洲高清 | 亚洲三级网 | 一区 在线 影院 | 欧美一性一交一乱 | 中文有码在线视频 | 免费视频资源 | 三级黄色免费片 | www亚洲国产 | 色一级片 | 少妇bbbb搡bbbb搡bbbb | 精品亚洲在线 | 亚洲人成免费网站 | 国产在线久久久 | 国产精品久久久久久久免费观看 | 成人免费视频网 | 日韩三级.com| 黄色成人小视频 | 免费视频你懂的 | 成年人在线 | 久久综合色一综合色88 | 久久久成人精品 | 国产小视频免费在线网址 | 91完整版在线观看 | 国产精品女人久久久 | 久草网在线观看 | 五月婷婷六月丁香 | 狠狠色婷婷丁香六月 | 日韩欧美视频 | 在线亚洲成人 | 亚洲国产播放 | 久草在线官网 | 96久久久 | 久久观看最新视频 | 午夜精品久久久久久99热明星 | 色婷婷狠狠18 | 久久精品久久精品 | 日韩免费观看一区二区三区 | 久草热久草视频 | 九九精品久久久 | 色的网站在线观看 | 久久免费一级片 | 日韩精品久久久久久中文字幕8 | 日韩在线免费视频观看 | 黄色软件大全网站 | 99精品久久久久久久 | 中文在线字幕免费观 | 久久久久美女 | 久久午夜免费观看 | 日韩精品视频免费专区在线播放 | 国产一区在线观看视频 | 国产视频资源 | 粉嫩av一区二区三区四区在线观看 | 国产精品色 | 激情av资源网 | 国产一级片不卡 | 福利片免费看 | 久久一区二区免费视频 | 午夜精品99久久免费 | 激情 亚洲| 天天做天天爱天天爽综合网 | 亚洲精品在线一区二区三区 | v片在线看 | 亚洲我射av | 亚洲欧美视频在线播放 | 激情五月婷婷激情 | 亚洲人成影院在线 | 国产成人久 | 中文字幕在线观看网址 | 99综合电影在线视频 | 在线免费黄 | 国产精品久久久久久久久久妇女 | 国产精品久久久久久久久大全 | 国产一区二区在线免费观看 | 久久精品美女视频网站 | 一区二区三区精品在线视频 | 久久久久久久久久影院 | 日韩免费观看一区二区三区 | 九九久久久久99精品 | 欧美一级特黄aaaaaa大片在线观看 | 干亚洲少妇| 国产又粗又硬又长又爽的视频 | 久久久久免费精品国产 | 国产亚洲欧美一区 | 视频一区二区三区视频 | 亚洲天堂精品视频在线观看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 九九九在线观看视频 | 欧美日韩一区二区三区在线免费观看 | 人人爽人人做 | 久久久久久久亚洲精品 | 欧美精品在线一区二区 | 午夜在线日韩 | 亚洲国产一二三 | 欧美一区二区三区在线视频观看 | www久久com| 五月婷婷综 | 成人在线你懂得 | 日韩精品一区二区三区水蜜桃 | 午夜精品一二区 | 亚洲综合欧美日韩狠狠色 | 免费在线观看av不卡 | www蜜桃视频| 91精品啪在线观看国产线免费 | 一级黄色片在线免费观看 | 久久开心激情 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 久久老司机精品视频 | 黄色精品国产 | av在线看片 | 亚洲激情视频 | 国产午夜精品一区 | 一二三久久久 | av片中文 | 97天天干 | 亚洲精品视频偷拍 | 三级黄色片子 | 99精品乱码国产在线观看 | 久久高清免费观看 | freejavvideo日本免费 | 91精品国自产在线观看欧美 | 日韩av成人| 国产91在线播放 | 91热爆在线观看 | 91一区啪爱嗯打偷拍欧美 | 久久久99国产精品免费 | 免费看污污视频的网站 | 成人一级 | 激情丁香综合 | 中文区中文字幕免费看 | 少妇精品久久久一区二区免费 | 国产精品久久久久久久毛片 | 伊人资源视频在线 | 日韩91精品 | a爱爱视频 | 蜜臀91丨九色丨蝌蚪老版 | 国产操在线 | 久久久久伦理电影 | 国产一区在线看 | 天天综合成人 | 高清不卡毛片 | 亚洲 欧美 综合 在线 精品 | 一级片免费在线 | 中文字幕乱偷在线 | 午夜123| 亚洲欧美在线观看视频 | 久久久伦理 | 丁香婷婷综合激情五月色 | 超碰激情在线 | 亚洲一区二区三区毛片 | 在线成人短视频 | 日本黄区免费视频观看 | 91av视频免费观看 | mm1313亚洲精品国产 | 午夜视频在线网站 | 免费成人短视频 | 丁香六月天婷婷 | 国产在线精品国自产拍影院 | 成人教育av | 国产伦理一区 | 日韩av中文在线观看 | 国产香蕉视频在线播放 | 色婷婷精品| 麻豆视频免费在线 | 日韩欧美视频在线 | 亚洲国产精品久久久久 | 成人免费在线网 | 国产精品原创在线 | 欧美久久久久久久 | 看全黄大色黄大片 | 在线v片免费观看视频 | 日韩精品视频第一页 | 天天艹天天爽 | 亚洲成人影音 | 99久久精品无免国产免费 | 亚洲国产中文字幕在线 | 国产成人在线精品 | 国产99久久久久 | 国产欧美日韩一区 | 国产在线 一区二区三区 | 久草久热| 成人影视片 | 91在线在线观看 | 91精品国自产拍天天拍 | 9在线观看免费高清完整版在线观看明 | 九九热在线观看视频 | 91精品在线免费观看 | 在线看欧美 | 亚洲黄色免费 | 国产欧美在线一区二区三区 | 国产一级三级 | 中文在线a√在线 | 狠狠gao | 在线亚洲天堂网 | 91精品视频导航 | 91免费国产在线观看 | 操老逼免费视频 | 在线观看v片 | 一区二区三区观看 | 日本最新一区二区三区 | 国产伦精品一区二区三区照片91 | 久久视频一区二区 | 精品国产不卡 | 日韩专区视频 | 国产精品精品国产色婷婷 | sm免费xx网站 | 日日天天干 | 国产涩涩网站 | 国产精品毛片一区二区在线看 | 97电影院网| 亚洲国产成人av网 | 97视频资源| 欧美性生交大片免网 | 日本精品免费看 | 日韩在线一二三区 | 亚洲精品视频网址 | 欧美日韩精品电影 | 欧美一级xxxx | 久久久久久久久影视 | 在线视频一二三 | 国产一级片播放 | 91在线视频在线 | av电影免费观看 | 日韩黄色免费看 | 日日干夜夜草 | 成人在线免费小视频 | 最新国产精品拍自在线播放 | 不卡av在线免费观看 | 91视频免费网站 | 免费视频91 | 草久在线播放 | 久草久草在线 | 久草久视频 | 亚洲最大av | 精精国产xxxx视频在线播放 | 人人讲| 日本大片免费观看在线 | 69久久夜色精品国产69 | 色丁香综合 | av7777777| 一区二区亚洲精品 | 日日操操 | 97操操操 | 一区二区激情视频 | 精品在线视频一区二区三区 | 美女免费视频一区二区 | 久久国产精品99久久久久久老狼 | 亚洲一区视频在线播放 | 久99精品 | 亚洲一区二区三区91 | 99热这里只有精品久久 | 亚洲精品白浆高清久久久久久 | 激情六月婷婷久久 | 久久久久五月 | 亚洲精品在线网站 | 激情大尺度视频 | 最新午夜电影 | 国产综合视频在线观看 | 午夜黄色一级片 | 中文理论片| 成人免费视频网 | 国产91探花 | 欧美三人交 | 91在线观 | 91久久丝袜国产露脸动漫 | 日韩女同一区二区三区在线观看 | 日韩无在线| 国产视频观看 | 国产国产人免费人成免费视频 | 成人一区影院 | 中文字幕av网站 | 精品麻豆入口免费 | 激情婷婷色 | 中文国产成人精品久久一 | 天天夜操| 婷婷精品国产一区二区三区日韩 | 在线观看视频黄 | 激情综合网天天干 | 日韩大片在线观看 | 在线之家免费在线观看电影 | 99re8这里有精品热视频免费 | www.com.日本一级 | 欧美日韩xxx | 日韩欧美69 | 日韩欧美在线高清 | 岛国精品一区二区 | 亚洲欧美日韩国产 | 黄色免费视频在线观看 | 亚洲va在线va天堂 | 久久影视网 | 激情丁香月 | 精品国产一区二区三区在线 | 久久爽久久爽久久av东京爽 | 国产91欧美 | 国产美女被啪进深处喷白浆视频 | 日韩美在线 | 96av麻豆蜜桃一区二区 | 欧美国产日韩一区二区 | 999日韩| 国产在线观看一 | 欧美一级在线观看视频 | 日韩高清精品一区二区 | 黄色特一级| 欧美日韩一区二区免费在线观看 | 亚洲在线激情 | 91一区啪爱嗯打偷拍欧美 | 欧美日韩免费观看一区=区三区 | 国产精品v欧美精品v日韩 | 国产成人精品999在线观看 | 婷婷六月丁香激情 | 一个色综合网站 | 精品久久一区二区三区 | 黄色特级片 | www.夜夜骑.com| 日日夜夜网 | 久久久久久高潮国产精品视 | 91视频com | 久久综合久色欧美综合狠狠 | 亚洲精品免费在线播放 | 国产精品久久久久久久电影 | 久久亚洲成人网 | 成年人在线免费看视频 | 97国产情侣爱久久免费观看 | 国产精品成人一区二区三区 | 人人插人人射 | 久久久综合香蕉尹人综合网 | 国产亚洲在线 | 99热在线免费观看 | 狠狠色婷婷丁香六月 | 超碰在线色 | 免费视频在线观看网站 | www.狠狠操.com | 成人 亚洲 欧美 | 开心激情久久 | 久久国产二区 | 麻豆国产精品一区二区三区 | 欧美网站黄色 | 天天干天天操天天操 | 亚洲乱码中文字幕综合 | 免费男女网站 | 色吊丝在线永久观看最新版本 | 九色最新网址 | 国产视频精品免费 | 日韩欧美在线视频一区二区三区 | 免费激情在线电影 | 久久av伊人 | 偷拍精品一区二区三区 | 九九国产精品视频 | 免费黄色网止 | 免费日韩一区二区 | 伊人在线视频 | 日韩高清精品一区二区 | 免费观看黄| 国产精品自拍在线 | 在线视频日韩一区 | 欧美一区二区三区在线播放 | 中文字幕传媒 | 国内精品久久久久久久影视麻豆 | 国产一区二区三区四区在线 | 日韩av电影手机在线观看 | 黄色日本片| 成人精品电影 | 在线中文字幕视频 | 久久久久久国产精品久久 | 国产福利精品一区二区 | 色av色av色av| 成人黄色一级视频 | 久久综合九色99 | 亚洲精品午夜久久久久久久久久久 | 天天天射 | 日日爽天天 | 国产免费a | 五月天亚洲综合小说网 | 777xxx欧美 | 亚洲国产中文在线观看 | a黄色影院 | 亚洲综合成人专区片 | 午夜国产福利在线观看 | 国产精品免费大片视频 | 国产不卡视频在线 | 午夜精品一区二区三区免费 | 婷五月天激情 | 日韩中文在线电影 | 91成人免费视频 | 五月天狠狠操 | 美女精品国产 | 玖草影院 | 西西4444www大胆艺术 | 五月天亚洲婷婷 | 免费在线播放 | 日本性视频 | 日韩电影一区二区三区在线观看 | 亚洲乱码国产乱码精品天美传媒 | 最近中文国产在线视频 | 久操免费视频 | 国产日女人 | 在线国产日本 | 精品久久久久一区二区国产 | 国产在线视频在线观看 | 五月天国产 | 性色va| 日韩中文字幕免费电影 | 亚洲 av网站 | 久久人91精品久久久久久不卡 | 四虎永久视频 | 在线观看完整版 | 日本精品一区二区三区在线观看 | 久久综合狠狠狠色97 | 99久久激情 | 欧洲精品久久久久毛片完整版 | 国产一区二区在线免费视频 | 日韩欧美在线视频一区二区 | 亚洲国产精久久久久久久 | 国产手机在线精品 | 热久久影视 | 夜夜操夜夜干 | 国产人免费人成免费视频 | 欧美国产高清 | 2020天天干夜夜爽 | 午夜精品一区二区三区四区 | 久久久精品欧美一区二区免费 | 美女视频黄的免费的 | 97超视频在线观看 | 99精品国产免费久久久久久下载 | 在线视频 区| 亚洲天堂网在线观看视频 | 久久精品一区二区三区视频 | 色婷婷亚洲婷婷 | 日韩二区三区在线 | 探花视频免费在线观看 | 国产黑丝袜在线 | 国产精品乱码久久 | 国产婷婷在线观看 | 色综合人人 | 99 久久久久| 国产中文字幕91 | 亚洲电影成人 | 日韩电影中文字幕在线 | 偷拍区另类综合在线 | 激情丁香久久 | 7777xxxx| 亚洲精品乱码白浆高清久久久久久 | 日日夜操 | 国产精品av在线 | 就要干b| 99精品视频在线播放免费 | 国产在线观看,日本 | 亚洲国产影院av久久久久 | 国产在线观看av | 精品一区二区免费 | 欧美日韩精品在线免费观看 | 97人人人人 | 精品国产免费看 | 免费亚洲黄色 | 亚洲国产成人在线观看 | 国产成人精品网站 | 免费观看的av网站 | 久久99国产精品 | 国内视频一区二区 | 91久久久久久久一区二区 | 人人干在线 | 99电影456麻豆 | 亚洲一级电影视频 | 91丨九色丨蝌蚪丨对白 | 亚洲最新视频在线 | 国产精品视频永久免费播放 | 91最新在线 | 国产视频精品久久 | 日韩av成人在线观看 | 国产高清av免费在线观看 | 十八岁以下禁止观看的1000个网站 | 7777xxxx| 蜜臀av性久久久久av蜜臀三区 | 少妇高潮冒白浆 | 综合在线亚洲 | 国内精品在线一区 | 精品国产1区 | 欧美精品被 | 久久深夜福利免费观看 | 亚洲最大成人免费网站 | 九色91在线视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 69av在线播放| 天天做天天爱天天综合网 | 婷婷日韩| 日韩在线国产精品 | 毛片一二区 | 欧美成天堂网地址 | 91在线视频 | 国产高清免费视频 | 亚洲黄色区 | 4438全国亚洲精品观看视频 | 久久五月婷婷丁香 | 日韩色av色资源 | 性色av一区二区三区在线观看 | 色夜视频 | 久久综合综合久久综合 | 中文字幕在线字幕中文 | 中文字幕在线色 | 久久久久国产精品www | 黄色app网站在线观看 | 精品福利av | 久久国产精品99精国产 | 999在线观看视频 | 欧美日本啪啪无遮挡网站 | 91高清免费 | 日韩欧美国产免费播放 | 色综合天天爱 | 98超碰在线观看 | 国产精品久久久久久久久蜜臀 | 91精品一区二区三区蜜桃 | 精品国产片 | 91九色九色| 亚洲精品午夜一区人人爽 | 超碰人人乐 | 久久av影院| av超碰在线 | 色射色 | 激情综合亚洲 | 夜夜躁日日躁 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 一区二区精品视频 | 久久好看免费视频 | 成人资源站 | 美女网站色免费 | www日韩| 日本一区二区不卡高清 | 日韩字幕在线 | 欧美在线视频精品 | 日韩电影在线一区二区 | 最近在线中文字幕 | 少妇bbw撒尿 | 亚洲精品国产综合久久 | 天天综合网国产 | 日日夜夜精品视频 | 在线影院av | 日韩,中文字幕 | 国产精品欧美久久久久天天影视 | 国产短视频在线播放 | 日韩精品一区二区三区外面 | 欧美午夜精品久久久久 | 成人免费网站在线观看 | 亚洲综合网 | 国内精品久久久久久中文字幕 | 国产精品中文字幕av | 亚洲人成在线电影 | 在线视频一二区 | 日本最大色倩网站www | 超碰精品在线 | 在线电影a| 国产日女人 | 欧美日韩一区三区 | 亚洲精品国偷自产在线99热 | 国产小视频福利在线 | 亚洲电影影音先锋 | 亚洲精品字幕在线 | 麻豆影视在线播放 | 久久成人视屏 | 国产综合在线观看视频 | 久久精品牌麻豆国产大山 | 久久午夜鲁丝片 | 涩涩网站在线观看 | 免费视频久久久久 | 国产在线a免费观看 | 免费色网| 色综合久久久久久中文网 | 中文字幕在 | 精品一区av | 日韩精品视频一二三 | 色综合天| 伊人天堂久久 | 国产69精品久久99的直播节目 | 久久九九九九 | 99精品一区二区三区 | 国产一二区视频 | 91免费看黄| 一区二区三区在线观看免费 | 精品视频999 | 久久网站免费 | 国产精品99久久久久久人免费 | 超碰在线公开免费 | 国产精品6 | 国产精品午夜av | 中文字幕国语官网在线视频 | 国产视频第二页 | 国产看片 色 | 亚洲精品视频在 | 日日日日| 国产又粗又猛又色又黄网站 | 亚洲女人天堂成人av在线 | 在线激情影院一区 | 日韩av视屏 | 97在线看 | 精品国产伦一区二区三区观看说明 | 国产在线视频在线观看 | 日本精品久久久一区二区三区 | 99超碰在线观看 | 99久久一区 | 国产在线91在线电影 | 国产日韩欧美精品在线观看 | 欧美日韩1区 | 亚洲免费在线看 | 婷婷在线免费视频 | 精品99久久久久久 | 99热精品久久 | 成人9ⅰ免费影视网站 | 伊人黄| 成年人黄色免费网站 | 日韩精品一区二区三区高清免费 | 久久黄网站 | 欧美成人视 | 超碰在线人人草 | 亚洲九九影院 | 黄色av成人在线观看 | 香蕉久久久久久av成人 | 国偷自产中文字幕亚洲手机在线 | 精品一区在线看 | 久久躁日日躁aaaaxxxx | 麻豆av一区二区三区在线观看 | 99精品国产免费久久久久久下载 | 黄色av一区二区 | 99精品在线视频观看 | 成人午夜黄色影院 | 怡春院av | 中文在线a在线 | 国产日产精品一区二区三区四区的观看方式 | 亚洲国产人午在线一二区 | 久久久99精品免费观看app | 国产中年夫妇高潮精品视频 | 国产中文字幕久久 | 91视频亚洲| 久久国产91 | 91精品视屏| 国产精品系列在线 | 少妇bbw搡bbbb搡bbb | 久久伊人免费视频 | 97人人澡人人添人人爽超碰 | 水蜜桃亚洲一二三四在线 | 欧美日韩一二三四区 | 国产婷婷一区二区 | 91av播放 | 久香蕉 | 国产午夜不卡 | 综合久久久久久久久 | 四虎影视国产精品免费久久 | 一区久久久 | 精品久久一 | 国产一级在线观看 | 黄色亚洲| 精品国产自在精品国产精野外直播 | 人人艹视频 | 91最新网址 | 99超碰在线播放 | 久草在线视频新 | 二区精品视频 | 久草视频在线观 | 久久精品艹 | 日韩久久精品一区二区 | 亚洲激情 在线 | 99精品视频在线 | 日韩色一区二区三区 | 精品一区二区日韩 | 久久99久久99免费视频 | 久久蜜臀一区二区三区av | 日韩av高清在线观看 | 亚洲九九爱 | 国产精品爽爽久久久久久蜜臀 | 狠狠狠色丁香综合久久天下网 | av在线免费在线 | 国产精品一区专区欧美日韩 | 婷婷av电影 | 婷婷五月在线视频 | 中文字幕一区二区三区四区 | 中文字幕乱码日本亚洲一区二区 | 久久精品99久久久久久 | 国产999精品久久久影片官网 | 三级大片网站 | www成人av| 最近中文字幕免费观看 | 亚洲第一av在线 | 日本中文字幕网站 | av永久网址 | 色婷五月天 | 国产精品一区二区三区四区在线观看 | 亚洲精品成人av在线 | 欧美一级免费高清 | 欧美日韩精品在线观看 | 日韩午夜网站 | 亚洲成人影音 | 久久国产精品小视频 | 国产一区二区精 | 国内外成人在线视频 | 午夜免费视频网站 | 亚洲欧洲国产视频 | 久久精品免费电影 | 97综合视频 | 久久精品4| 色99在线| 狠狠干综合网 | 久久高清国产视频 | 欧美日韩亚洲精品在线 | 中文在线字幕观看电影 | 国产成人综 | 狠狠色狠狠色综合日日92 | 久久免费播放视频 | av看片在线 | 亚洲综合欧美日韩狠狠色 | 99久久99视频| 免费亚洲成人 | 婷婷激情五月 | av激情五月 | 91网址在线观看 | 国产高清视频在线免费观看 | 天天干天天爽 | 亚洲精品国产成人av在线 | 日韩午夜av | 婷婷色影院 | 久久激情视频 | 成人在线播放视频 | 久草网站在线观看 | 中国一级片在线观看 | 国产高清一级 | av中文字幕在线看 | 日韩色中色| 一区二区三区在线免费观看视频 | 久精品视频在线 | 免费www视频 | 色婷婷久久 | 成人av高清在线观看 | 午夜av免费看 | 国产一级三级 | 久久综合影院 | 99精品国产视频 | 久草视频免费 | 五月天综合婷婷 | 久久久午夜剧场 | 日韩在线网址 | 黄色电影在线免费观看 | 人人干人人模 | 精品久久精品 | 在线免费观看国产黄色 | 久久久久久久精 | 精品久久久久久久久久 | 国产精品乱码久久久 | 日韩视频一区二区三区 | 国产精品igao视频网网址 | 免费av电影网站 | 99久久网站 | 亚洲首页 | 91桃色免费视频 | 天天艹天天 | 欧美成人日韩 | 免费看一级 | 天天舔天天射天天操 | 国产精品欧美久久久久无广告 | 国产欧美最新羞羞视频在线观看 | 99热.com| 国产理论影院 | 500部大龄熟乱视频 欧美日本三级 | 精品免费一区 | 久久久精品影视 | 黄av资源| 在线视频日韩精品 | 久久国语露脸国产精品电影 | 91正在播放 | 美女视频黄免费的久久 | 亚洲韩国一区二区三区 | 2019中文最近的2019中文在线 | 欧美午夜精品久久久久 | 在线视频精品播放 | 亚洲综合激情小说 | 国产 亚洲 欧美 在线 | 一区二区三区免费播放 | 国产一区二区在线视频观看 | 久久久免费网站 | 欧美成人高清 | 成年人网站免费在线观看 | 亚洲成av人影片在线观看 | 久久天天躁夜夜躁狠狠躁2022 | 日韩大陆欧美高清视频区 | 成年人视频在线免费观看 | 丁香六月中文字幕 | 国产精品久久久久久一二三四五 | 碰超在线97人人 | 在线蜜桃视频 | 国产综合视频在线观看 | 亚洲激情综合 | 成人黄色小视频 | 99精品美女| 午夜国产福利在线观看 | 欧美日韩国产二区三区 | 日本韩国精品一区二区在线观看 | 国产精品久久免费看 | 在线免费观看视频你懂的 | 国产涩图 | 一区二区三区在线免费 | 亚洲精品黄色片 | 麻豆视频免费播放 | 久久久久观看 | 天天干天天干天天操 | 天天搞天天干 | 欧美人人| 激情av资源网 | 久久任你操 | 日韩精品高清不卡 | 成年人看片网站 | 久久在线精品 | 国产一级大片在线观看 |