一起草最新网址_日韩一区二区麻豆国产_91视频婷婷_日本一区二区视频在线_日韩激情一区二区三区_国产另类第一区_成人免费在线播放视频_亚洲永久精品ww.7491进入_久久这里有精品视频_久久精品一级片_日韩av在线网页_波多野结衣不卡视频

輕松使用 DOM 的技巧和訣竅_Xml教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:分析利用XML實(shí)現(xiàn)通用WEB報(bào)表打印實(shí)際使用中的例子
最近做的一個(gè)B/S項(xiàng)目,在打印時(shí)采用了在IE中嵌入.net winform控件和XML結(jié)合的方式(參見http://www.yesky.com/20030214/1652186.shtml),在實(shí)際應(yīng)用過程中,有一些心得,和大家分享。 (一)

Dethe Elza (delza@livingcode.org), 高級(jí)技術(shù)架構(gòu)師, Blast Radius


文檔對(duì)象模型(Document Object Model,DOM)是用于操縱 XML 和 HTML 數(shù)據(jù)的最常用工具之一,然而它的潛力卻很少被充分挖掘出來。通過利用 DOM 的優(yōu)勢(shì),并使它更加易用,您將獲得一款應(yīng)用于 XML 應(yīng)用程序(包括動(dòng)態(tài) Web 應(yīng)用程序)的強(qiáng)大工具。

本期文章介紹了一位客串的專欄作家,同時(shí)也是我的朋友和同事 Dethe Elza。Dethe 在利用 XML 進(jìn)行 Web 應(yīng)用程序開發(fā)方面經(jīng)驗(yàn)豐富,在此,我要感謝他對(duì)我在介紹使用 DOM 和 ECMAScript 進(jìn)行 XML 編程這一方面的幫助。請(qǐng)密切關(guān)注本專欄,以了解 Dethe 的更多專欄文章。
—— David Mertz

DOM 是處理 XML 和 HTML 的標(biāo)準(zhǔn) API 之一。由于它占用內(nèi)存大、速度慢,并且冗長,所以經(jīng)常受到人們的指責(zé)。盡管如此,對(duì)于很多應(yīng)用程序來說,它仍然是最佳選擇,而且比 XML 的另一個(gè)主要 API —— SAX 無疑要簡單得多。DOM 正逐漸出現(xiàn)在一些工具中,比如 Web 瀏覽器、SVG 瀏覽器、OpenOffice,等等。

DOM 很好,因?yàn)樗且环N標(biāo)準(zhǔn),并且被廣泛地實(shí)現(xiàn),同時(shí)也內(nèi)置到其他標(biāo)準(zhǔn)中。作為標(biāo)準(zhǔn),它對(duì)數(shù)據(jù)的處理與編程語言無關(guān)(這可能是優(yōu)點(diǎn),也可能是缺點(diǎn),但至少使我們處理數(shù)據(jù)的方式變得一致)。DOM 現(xiàn)在不僅內(nèi)置于 Web 瀏覽器,而且也成為許多基于 XML 的規(guī)范的一部分。既然它已經(jīng)成為您的工具的一部分,并且或許您偶爾還會(huì)使用它,我想現(xiàn)在應(yīng)該充分利用它給我們帶來的功能了。

在使用 DOM 一段時(shí)間后,您會(huì)看到形成了一些模式 —— 您想要反復(fù)做的事情。快捷方式可以幫助您處理冗長的 DOM,并創(chuàng)建自解釋的、優(yōu)雅的代碼。這里收集了一些我經(jīng)常使用的技巧和訣竅,還有一些 JavaScript 示例。

insertAfter 和 prependChild

第一個(gè)訣竅就是“沒有訣竅”。DOM 有兩種方法將孩子節(jié)點(diǎn)添加到容器節(jié)點(diǎn)(常常是一個(gè) Element,也可能是一個(gè) Document 或 Document Fragment):appendChild(node) 和 insertBefore(node, referenceNode)。看起來似乎缺少了什么。假如我想在一個(gè)參考節(jié)點(diǎn)后面插入或者由前新增(prepend)一個(gè)子節(jié)點(diǎn)(使新節(jié)點(diǎn)位于列表中的第一位),我該怎么做呢?很多年以來,我的解決方法是編寫下列函數(shù):

清單 1. 插入和由前新增的錯(cuò)誤方法
function insertAfter(parent, node, referenceNode) {
if(referenceNode.nextSibling) {
parent.insertBefore(node, referenceNode.nextSibling);
} else {
parent.appendChild(node);
}
}
function prependChild(parent, node) {
if (parent.firstChild) {
parent.insertBefore(node, parent.firstChild);
} else {
parent.appendChild(node);
}
}

實(shí)際上,像清單 1 一樣,insertBefore() 函數(shù)已經(jīng)被定義為,在參考節(jié)點(diǎn)為空時(shí)返回到 appendChild()。因此,您可以不使用上面的方法,而使用 清單 2 中的方法,或者跳過它們僅使用內(nèi)置函數(shù):

清單 2. 插入和由前新增的正確方法
function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}
function prependChild(parent, node) {
parent.insertBefore(node, parent.firstChild);
}

如果您剛剛接觸 DOM 編程,有必要指出的是,雖然您可以使多個(gè)指針指向一個(gè)節(jié)點(diǎn),但該節(jié)點(diǎn)只能存在于 DOM 樹中的一個(gè)位置。因此,如果您想將它插入到樹中,沒必要先將它從樹中移除,因?yàn)樗鼤?huì)自動(dòng)被移除。當(dāng)重新將節(jié)點(diǎn)排序時(shí),這種機(jī)制很方便,僅需將節(jié)點(diǎn)插入到新位置即可。

根據(jù)這種機(jī)制,若想交換兩個(gè)相鄰節(jié)點(diǎn)(稱為 node1 和 node2)的位置,可以使用下列方案之一:

node1.parentNode.insertBefore(node2, node1);

node1.parentNode.insertBefore(node1.nextSibling, node1);

還可以使用 DOM 做什么?

Web 頁面中大量應(yīng)用了 DOM。若訪問 bookmarklets 站點(diǎn)(參閱 參考資料),您會(huì)發(fā)現(xiàn)很多有創(chuàng)意的簡短腳本,它們可以重新編排頁面,提取鏈接,隱藏圖片或 Flash 廣告,等等。

但是,因?yàn)?Internet Explorer 沒有定義 Node 接口常量(可以用于識(shí)別節(jié)點(diǎn)類型),所以您必須確保在遺漏接口常量時(shí),首先為 Web 在 DOM 腳本中定義接口常量。

清單 3. 確保節(jié)點(diǎn)被定義
if (!window['Node']) {
window.Node = new Object();
Node.ELEMENT_NODE = 1;
Node.ATTRIBUTE_NODE = 2;
Node.TEXT_NODE = 3;
Node.CDATA_SECTION_NODE = 4;
Node.ENTITY_REFERENCE_NODE = 5;
Node.ENTITY_NODE = 6;
Node.PROCESSING_INSTRUCTION_NODE = 7;
Node.COMMENT_NODE = 8;
Node.DOCUMENT_NODE = 9;
Node.DOCUMENT_TYPE_NODE = 10;
Node.DOCUMENT_FRAGMENT_NODE = 11;
Node.NOTATION_NODE = 12;
}

清單 4 展示如何提取包含在節(jié)點(diǎn)中的所有文本節(jié)點(diǎn):

清單 4. 內(nèi)部文本
function innerText(node) {
// is this a text or CDATA node?
if (node.nodeType == 3 || node.nodeType == 4) {
return node.data;
}
var i;
var returnValue = [];
for (i = 0; i < node.childNodes.length; i ) {
returnValue.push(innerText(node.childNodes[i]));
}
return returnValue.join('');
}

快捷方式

人們常常抱怨 DOM 太過冗長,并且簡單的功能也需要編寫大量代碼。例如,如果您想創(chuàng)建一個(gè)包含文本并響應(yīng)點(diǎn)擊按鈕的 <div> 元素,代碼可能類似于:

清單 5. 創(chuàng)建 <div> 的“漫長之路”
function handle_button() {
var parent = document.getElementById('myContainer');
var div = document.createElement('div');
div.className = 'myDivCSSClass';
div.id = 'myDivId';
div.style.position = 'absolute';
div.style.left = '300px';
div.style.top = '200px';
var text = "This is the first text of the rest of this code";
var textNode = document.createTextNode(text);
div.appendChild(textNode);
parent.appendChild(div);
}


若頻繁按照這種方式創(chuàng)建節(jié)點(diǎn),鍵入所有這些代碼會(huì)使您很快疲憊不堪。必須有更好的解決方案 —— 確實(shí)有這樣的解決方案!下面這個(gè)實(shí)用工具可以幫助您創(chuàng)建元素、設(shè)置元素屬性和風(fēng)格,并添加文本子節(jié)點(diǎn)。除了 name 參數(shù),其他參數(shù)都是可選的。

清單 6. 函數(shù) elem() 快捷方式
function elem(name, attrs, style, text) {
var e = document.createElement(name);
if (attrs) {
for (key in attrs) {
if (key == 'class') {
e.className = attrs[key];
} else if (key == 'id') {
e.id = attrs[key];
} else {
e.setAttribute(key, attrs[key]);
}
}
}
if (style) {
for (key in style) {
e.style[key] = style[key];
}
}
if (text) {
e.appendChild(document.createTextNode(text));
}
return e;
}

使用該快捷方式,您能夠以更加簡潔的方法創(chuàng)建 清單 5 中的 <div> 元素。注意,attrs 和 style 參數(shù)是使用 JavaScript 文本對(duì)象而給出的。

清單 7. 創(chuàng)建 <div> 的簡便方法
function handle_button() {
var parent = document.getElementById('myContainer');
parent.appendChild(elem('div',
{class: 'myDivCSSClass', id: 'myDivId'}
{position: 'absolute', left: '300px', top: '200px'},
'This is the first text of the rest of this code'));
}

在您想要快速創(chuàng)建大量復(fù)雜的 DHTML 對(duì)象時(shí),這種實(shí)用工具可以節(jié)省您大量的時(shí)間。模式在這里就是指,如果您有一種需要頻繁創(chuàng)建的特定的 DOM 結(jié)構(gòu),則使用實(shí)用工具來創(chuàng)建它們。這不但減少了您編寫的代碼量,而且也減少了重復(fù)的剪切、粘貼代碼(錯(cuò)誤的罪魁禍?zhǔn)祝⑶以陂喿x代碼時(shí)思路更加清晰。

接下來是什么?
DOM 通常很難告訴您,按照文檔的順序,下一個(gè)節(jié)點(diǎn)是什么。下面有一些實(shí)用工具,可以幫助您在節(jié)點(diǎn)間前后移動(dòng):

清單 8. nextNode 和 prevNode
// return next node in document order
function nextNode(node) {
if (!node) return null;
if (node.firstChild){
return node.firstChild;
} else {
return nextWide(node);
}
}
// helper function for nextNode()
function nextWide(node) {
if (!node) return null;
if (node.nextSibling) {
return node.nextSibling;
} else {
return nextWide(node.parentNode);
}
}
// return previous node in document order
function prevNode(node) {
if (!node) return null;
if (node.previousSibling) {
return previousDeep(node.previousSibling);
}
return node.parentNode;
}
// helper function for prevNode()
function previousDeep(node) {
if (!node) return null;
while (node.childNodes.length) {
node = node.lastChild;
}
return node;
}


輕松使用 DOM
有時(shí)候,您可能想要遍歷 DOM,在每個(gè)節(jié)點(diǎn)調(diào)用函數(shù)或從每個(gè)節(jié)點(diǎn)返回一個(gè)值。實(shí)際上,由于這些想法非常具有普遍性,所以 DOM Level 2 已經(jīng)包含了一個(gè)稱為 DOM Traversal and Range 的擴(kuò)展(為迭代 DOM 所有節(jié)點(diǎn)定義了對(duì)象和 API),它用來為 DOM 中的所有節(jié)點(diǎn)應(yīng)用函數(shù)和在 DOM 中選擇一個(gè)范圍。因?yàn)檫@些函數(shù)沒有在 Internet Explorer 中定義(至少目前是這樣),所以您可以使用 nextNode() 來做一些
類似的事情。

在這里,我們的想法是創(chuàng)建一些簡單、普通的工具,然后以不同的方式組裝它們來達(dá)到預(yù)期的效果。如果您很熟悉函數(shù)式編程,這看起來會(huì)很親切。Beyond JS 庫(參閱 參考資料)將此理念發(fā)揚(yáng)光大。

清單 9. 函數(shù)式 DOM 實(shí)用工具
// return an Array of all nodes, starting at startNode and
// continuing through the rest of the DOM tree
function listNodes(startNode) {
var list = new Array();
var node = startNode;
while(node) {
list.push(node);
node = nextNode(node);
}
return list;
}
// The same as listNodes(), but works backwards from startNode.
// Note that this is not the same as running listNodes() and
// reversing the list.
function listNodesReversed(startNode) {
var list = new Array();
var node = startNode;
while(node) {
list.push(node);
node = prevNode(node);
}
return list;
}
// apply func to each node in nodeList, return new list of results
function map(list, func) {
var result_list = new Array();
for (var i = 0; i < list.length; i ) {
result_list.push(func(list[i]));
}
return result_list;
}
// apply test to each node, return a new list of nodes for which
// test(node) returns true
function filter(list, test) {
var result_list = new Array();
for (var i = 0; i < list.length; i ) {
if (test(list[i])) result_list.push(list[i]);
}
return result_list;
}

清單 9 包含了 4 個(gè)基本工具。listNodes() 和 listNodesReversed() 函數(shù)可以擴(kuò)展到一個(gè)可選的長度,這與 Array 的 slice() 方法效果類似,我把這個(gè)作為留給您的練習(xí)。另一個(gè)需要注意的是,map() 和 filter() 函數(shù)是完全通用的,用于處理任何 列表(不只是節(jié)點(diǎn)列表)。現(xiàn)在,我向您展示它們的幾種組合方式。

清單 10. 使用函數(shù)式實(shí)用工具
// A list of all the element names in document order
function isElement(node) {
return node.nodeType == Node.ELEMENT_NODE;
}
function nodeName(node) {
return node.nodeName;
}
var elementNames = map(filter(listNodes(document),isElement), nodeName);
// All the text from the document (ignores CDATA)
function isText(node) {
return node.nodeType == Node.TEXT_NODE;
}
function nodeValue(node) {
return node.nodeValue;
}
var allText = map(filter(listNodes(document), isText), nodeValue);

您可以使用這些實(shí)用工具來提取 ID、修改樣式、找到某種節(jié)點(diǎn)并移除,等等。一旦 DOM Traversal and Range API 被廣泛實(shí)現(xiàn),您無需首先構(gòu)建列表,就可以用它們修改 DOM 樹。它們不但功能強(qiáng)大,并且工作方式也與我在上面所強(qiáng)調(diào)的方式類似。

DOM 的危險(xiǎn)地帶
注意,核心 DOM API 并不能使您將 XML 數(shù)據(jù)解析到 DOM,或者將 DOM 序列化為 XML。這些功能都定義在 DOM Level 3 的擴(kuò)展部分“Load and Save”,但它們還沒有被完全實(shí)現(xiàn),因此現(xiàn)在不要考慮這些。每個(gè)平臺(tái)(瀏覽器或其他專業(yè) DOM 應(yīng)用程序)有自己在 DOM 和 XML間轉(zhuǎn)換的方法,但跨平臺(tái)轉(zhuǎn)換不在本文討論范圍之內(nèi)。

DOM 并不是十分安全的工具 —— 特別是使用 DOM API 創(chuàng)建不能作為 XML 序列化的樹時(shí)。絕對(duì)不要在同一個(gè)程序中混合使用 DOM1 非名稱空間 API 和 DOM2 名稱空間感知的 API(例如,createElement 和 createElementNS)。如果您使用名稱空間,請(qǐng)盡量在根元素位置聲明所有名稱空間,并且不要覆蓋名稱空間前綴,否則情況會(huì)非常混亂。一般來說,只要按照慣例,就不會(huì)觸發(fā)使您陷入麻煩的臨界情況。

如果您一直使用 Internet Explorer 的 innerText 和 innerHTML 進(jìn)行解析,那么您可以試試使用 elem() 函數(shù)。通過構(gòu)建類似的一些實(shí)用工具,您會(huì)得到更多便利,并且繼承了跨平臺(tái)代碼的優(yōu)越性。將這兩種方法混合使用是非常糟糕的。

某些 Unicode 字符并沒有包含在 XML 中。DOM 的實(shí)現(xiàn)使您可以添加它們,但后果是無法序列化。這些字符包括大多數(shù)的控制字符和Unicode 代理對(duì)(surrogate pair)中的單個(gè)字符。只有您試圖在文檔中包含二進(jìn)制數(shù)據(jù)時(shí)才會(huì)遇到這種情況,但這是另一種轉(zhuǎn)向(gotcha)情況。


結(jié)束語
我已經(jīng)介紹了 DOM 能做的很多事情,但是 DOM(和 JavaScript)可以做的事情遠(yuǎn)不止這些。仔細(xì)研究、揣摩這些例子,看看是如何使用它們來解決可能需要客戶端腳本、模板或?qū)S?API 的問題。

DOM 有自己的局限性和缺點(diǎn),但同時(shí)也擁有眾多優(yōu)點(diǎn):它內(nèi)置于很多應(yīng)用程序中;無論使用 Java 技術(shù)、Python 或 JavaScript,它都以相同方式工作;它非常便于使用 SAX;使用上述的模板,它使用起來既簡潔又強(qiáng)大。越來越多的應(yīng)用程序開始支持 DOM,這包括基于 Mozilla的應(yīng)用程序、OpenOffice 和 Blast Radius 的 XMetaL。越來越多的規(guī)范需要 DOM,并對(duì)它加以擴(kuò)展(例如,SVG),因此 DOM 時(shí)時(shí)刻刻就在您的身邊。使用這種被廣泛部署的工具,絕對(duì)是您的明智之舉。

分享:怎樣使用XML引擎XQEngine
最近我一直在尋找XML搜索工具,我編寫的應(yīng)用程序需要定期的搜索一些有關(guān)聯(lián)的XML文件,我本來的意思是為了看一看文件中是否有與我想要的數(shù)據(jù)匹配的數(shù)據(jù),但是有時(shí)候,我也想把找到的這些數(shù)據(jù)輸出

來源:模板無憂//所屬分類:Xml教程/更新時(shí)間:2009-03-15
相關(guān)Xml教程
隣の若妻さん波多野结衣| 91精品国产欧美日韩| 亚洲偷欧美偷国内偷| 蜜桃视频无码区在线观看| 亚洲欧洲日韩综合一区二区| 久久人人爽人人爽人人片av高请| 青娱乐免费在线视频| 国产精品一区二区女厕厕| 黄色性生活一级片| 亚洲天堂av老司机| 久久久久久久久久久网站| 国产亚洲欧美精品久久久久久| 亚洲国产精品成人va在线观看| 亚洲一区二区三区四区五区六区 | 亚洲理论中文字幕| 亚洲综合成人在线| 日韩av在线播放不卡| 国产精品日产欧美久久久久| 成人免费看片视频在线观看| 2020国产精品| 一本一道久久a久久综合精品 | 国产91精品黑色丝袜高跟鞋| 9i看片成人免费看片| 欧美精品一区在线播放| 波多野结衣 久久| 久久久这里只有精品视频| 天天干天天操av| av成人在线电影| 美女脱光内衣内裤视频久久网站 | 国产免费中文字幕| 日韩欧美999| 中国特级黄色片| 久草综合在线视频| 欧美变态凌虐bdsm| 影音先锋男人看片资源| 亚洲韩国青草视频| 亚洲成人生活片| 国产精品激情自拍| 葵司免费一区二区三区四区五区| 成人性教育视频在线观看| 日韩一级免费毛片| 国产一区二区无遮挡| 国产激情一区二区三区四区 | 日本乱子伦xxxx| 日韩h在线观看| 日本青青草视频| 精品av综合导航| 国产精品成人69xxx免费视频| 国产午夜精品视频免费不卡69堂| 国产成a人亚洲精v品无码| 91精品国产综合久久香蕉最新版 | 亚洲成人av免费在线观看| 欧美极品少妇与黑人| 国产精品资源网| 正在播放一区| 一区二区在线看| 欧美熟妇精品一区二区| 欧美日韩福利电影| 国产wwwwwww| 天天想你在线观看完整版电影免费| 国产精品久久久久久久浪潮网站| www.com毛片| 欧美专区日韩专区| 午夜国产小视频| 操人视频在线观看欧美| 国产激情视频在线播放| 欧美一级黄色录像片| 欧美一级艳片视频免费观看| 国产人妖一区二区| 国产一区福利视频| 色综合网色综合| 色哟哟一一国产精品| 成人精品久久久| 亚洲成人一区二区在线观看| 欧美成人午夜精品免费| 色阁综合伊人av| 精品国产伦一区二区三| 欧美日韩在线播放一区二区| 亚洲欧美激情一区二区| 亚洲最大免费视频| 国产精品久久久久久搜索| 国产成人在线免费| 在线观看国产网站| 成人疯狂猛交xxx| 午夜国产不卡在线观看视频| 美女网站视频色| 欧美专区中文字幕| 国产裸体歌舞团一区二区| 中国特级黄色片| 国产精品久久精品| 亚洲成人tv网| 97精品人妻一区二区三区| 久久波多野结衣| 亚洲综合另类小说| 99成人精品视频| 久久亚洲免费| 亚洲高清免费视频| 亚洲无码精品在线观看| 美脚丝袜一区二区三区在线观看| 欧美久久一二区| 无码人妻av一区二区三区波多野| 国产伦精品一区二区三区免费视频 | 成人免费视频网址| 欧美日韩卡一卡二| 国内精品福利视频| 国产自产在线视频| 亚洲精品在线三区| 国产在线精品一区二区夜色| 免费观看成人网| 亚洲新中文字幕| 久久亚洲综合av| av资源吧首页| 久久66热这里只有精品| 亚洲精品在线三区| 99久久亚洲一区二区三区青草| 亚洲精品久久一区二区三区777| 久国内精品在线| 一区二区在线免费| 少妇av一区二区| 女尊高h男高潮呻吟| 久久久久网址| 在线播放日韩精品| 国产馆精品极品| 九九热精品免费视频| 成人免费a级片| 亚洲精品720p| 92精品国产成人观看免费 | 国产精品久久久久久亚洲伦| 久久青青草原亚洲av无码麻豆 | 欧美在线观看日本一区| 欧美亚洲图片小说| 国产又粗又猛又黄又爽| 做a视频在线观看| 国产高清一区视频| 在线观看日韩高清av| 久久99精品一区二区三区三区| 中文字幕在线视频精品| 99久久精品久久久久久ai换脸| 日韩激情视频在线播放| 亚洲三级久久久| 天天射天天操天天干| 欧美日韩国产一二三区| 欧美国产亚洲一区| 欧美成人四级hd版| 日韩欧美在线视频日韩欧美在线视频| 肉丝袜脚交视频一区二区| 人妻换人妻仑乱| 国产福利精品av综合导导航| 尤物在线观看一区| 久久一二三四| 毛片a片免费观看| 手机在线看福利| 97涩涩爰在线观看亚洲| 亚洲人精品午夜| 久久国产日本精品| 日本黄色动态图| 热久久最新地址| 国产主播精品在线| 伊是香蕉大人久久| 欧美性xxxx在线播放| 国产福利91精品一区| 中文无码精品一区二区三区| 国产黄视频在线| 亚洲综合成人婷婷小说| 欧美精品在线一区二区三区| 久久亚洲捆绑美女| 五月色婷婷综合| 亚洲精品在线视频免费观看| 可以在线看黄的网站| 成人国产精品久久久| 亚洲欧美激情视频| 国产欧美一区二区三区鸳鸯浴 | 天美星空大象mv在线观看视频| 激情一区二区三区| 精品视频在线导航| 久久久久久亚洲综合| 久久草视频在线| 自慰无码一区二区三区| 国产日韩欧美综合精品| 97久久精品人人澡人人爽缅北| 精品久久久久久无| 亚洲成人av电影在线| 99麻豆久久久国产精品免费| 婷婷色在线观看| www.久久久久久久| 午夜精产品一区二区在线观看的| 品久久久久久久久久96高清| 色噜噜狠狠狠综合曰曰曰88av| 欧美三级欧美成人高清www| 久久无码av三级| 丝袜国产日韩另类美女| 日韩中文字幕高清| 波多野结衣电影免费观看| 国产一区二区精品在线| 日本精品久久中文字幕佐佐木| 欧美性色黄大片| 国产欧美日韩麻豆91| 狠狠久久亚洲欧美| 日本学生初尝黑人巨免费视频| 国产午夜伦鲁鲁| 日本在线播放一区| 午夜精品99久久免费| 亚洲免费一在线| 制服.丝袜.亚洲.另类.中文| 久久久蜜桃精品| 国产综合久久久久久鬼色| 亚洲精品911| 黄色裸体一级片| 中文字幕无人区二| 国产一级特黄a大片免费| 亚洲国产精品女人| 日本黄网免费一区二区精品| 亚洲淫片在线视频| 国产99在线|中文| 欧美精品中文字幕一区| 国产香蕉97碰碰久久人人| 精品久久一二三区| 欧美精品在线观看一区二区| 一本久久精品一区二区| 一区二区三区四区视频精品免费| 国产日产精品一区| 天天色综合久久| 国产情侣自拍小视频| 中文字幕在线2018| 天天射天天干天天| 中文字幕亚洲高清| 欧类av怡春院| 国产毛片久久久久久国产毛片| 特级西西444www大精品视频| 日韩美女免费视频| 国内外成人免费激情在线视频网站 | 激情网站五月天| 久久久久久a亚洲欧洲aⅴ| 成人做爽爽免费视频| 久久天天躁狠狠躁老女人| 在线精品国产成人综合| 在线观看国产精品91| 一区二区三区国产视频| 亚洲香蕉av在线一区二区三区| 精品亚洲精品福利线在观看| 亚洲国产日韩一区| 亚洲成人av片| 精品视频在线导航| 国产亚洲精品久久久久动| 亚洲欧洲在线免费| 欧美美女黄视频| 欧美日韩在线播| 亚洲一级电影视频| 久久久久久久久久久99999| 99久久精品一区二区| av一区二区三区四区| 99热精品国产| 国产欧美精品一区aⅴ影院| 国产精品青草综合久久久久99| 国产欧美视频一区二区| 亚洲同性同志一二三专区| 亚洲精品久久嫩草网站秘色| 亚洲成人免费在线观看| 色综合久久99| 欧美嫩在线观看| 欧美精品一区二区三区在线播放 | 亚洲天堂av高清| 日韩中文字幕视频在线观看| 欧美电影免费观看完整版| 一本到三区不卡视频| 欧美日韩成人在线一区| 精品国一区二区三区| 亚洲日本欧美中文幕| 欧美成人精品一区二区| 国产成人精品999| 99re视频| 在线观看欧美激情| 久久精品视频16| 伊人再见免费在线观看高清版| 欧美视频免费看欧美视频| 国产精品人人爽人人爽| 国偷自产av一区二区三区麻豆| 男人天堂av电影| av漫画在线观看| 中文字幕黄色网址| 少妇真人直播免费视频| 日韩女优一区二区| 成人a v视频| 欧美性猛交 xxxx| 国产成a人亚洲精| 国产一区免费电影| 久久精品在这里| 午夜电影网亚洲视频| 欧美日韩一区三区| 国产婷婷成人久久av免费高清| 久久视频在线直播| 91精品国产自产在线老师啪| 热re99久久精品国产99热| 日本午夜激情视频| av在线天堂网| 18精品爽视频在线观看| 99久久婷婷国产一区二区三区 | 一区二区三区欧美亚洲| 欧美日韩精品一区视频| 一本一道久久a久久精品逆3p| 欧美一区二区影院| 欧美视频小说| 欧美精品无码一区二区三区| 91久久免费视频| 中文字幕精品视频在线观看| 日日骚欧美日韩| 国产精品少妇自拍| 欧美精品乱码久久久久久| 日韩在线一区二区三区免费视频| 国产有码在线一区二区视频| 日本不卡高清视频一区| the porn av| 天天综合网久久| 日本一二三区在线| 青草草在线视频| 日本波多野结衣在线| 91免费看`日韩一区二区| 久久精品欧美一区二区三区不卡| 狠狠做深爱婷婷久久综合一区| 91九色最新地址| 欧美一区二区啪啪| 欧美精品videossex性护士| 国产在线精品一区| 8x8x最新地址| 免费在线观看日韩| 香蕉视频黄在线观看| 欧美国产一区在线| 欧美一级爆毛片| 日韩av中文字幕在线| 国产成人在线亚洲欧美| 伊人久久大香线蕉午夜av| www.黄色网| 亚洲精品无码久久久久| 粉嫩aⅴ一区二区三区四区 | 蜜桃视频一区二区在线观看| 国产高清不卡无码视频| 一级黄色电影片| 亚洲手机在线观看| 91麻豆国产在线观看| 欧美日韩一区三区四区| 97视频免费看| 制服国产精品| 青青青视频在线播放| 天堂av中文字幕| 一区二区久久久久久| 国产一区二区三区18| 99国产精品久久久久老师| 大肉大捧一进一出好爽视频| 日日噜噜夜夜狠狠久久波多野| 天堂影院一区二区| 亚洲一区二区三区自拍| 俺去了亚洲欧美日韩| 欧美日韩在线播放一区二区| 最新版天堂资源在线| 免费中文字幕在线| 美女视频网站黄色亚洲| 欧美日韩亚洲一区二区三区| 久久久久国色av免费观看性色 | 99热在线这里只有精品| 欧美成人国产精品高潮| 国产尤物一区二区| 欧美人与z0zoxxxx视频| 国产精品一二三在线| 手机在线免费观看毛片| 精人妻无码一区二区三区| 国产日产亚洲精品系列| 亚洲欧美国产精品久久久久久久| 久久精品日产第一区二区三区精品版| 精品无码av一区二区三区| 性猛交富婆╳xxx乱大交天津| 一区二区视频在线看| 欧美日韩第一视频| 男女视频网站在线观看| 日韩成人高清视频| 91亚洲精品一区二区乱码| 精品无人国产偷自产在线| 日本a级片久久久| 国产精品麻豆免费版现看视频| 狠狠v欧美v日韩v亚洲ⅴ| 日韩一区二区三区四区 | 精品成人在线观看| 国产综合色一区二区三区| 亚洲最大免费视频| 日韩av一二三| 一级女性全黄久久生活片免费| 久热精品视频在线观看一区| av 日韩 人妻 黑人 综合 无码| 免费在线黄色片| 久久久久久电影| 久久久成人av| 久久久久资源| 国产精品久久久免费看| 国产超碰在线一区| 日韩精品在线免费播放| 在线观看国产一区| 成人毛片18女人毛片| 亚洲人成亚洲人成在线观看图片| 高清一区二区三区日本久| 天堂在线资源视频| 欧美在线 | 亚洲| 欧美精品久久久久久久多人混战| 岛国视频一区| 欧美乱大交做爰xxxⅹ小说| 成人高清免费观看| 欧美精品一级二级| 久99久视频| 国产极品在线播放| 亚洲欧美国产三级| 国产精品高清在线观看| 成年人的黄色片|