亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

javascript筆記--(第二十章)DOM進階

2024-04-27 15:09:15
字體:
來源:轉載
供稿:網友

DOM類型

Node類型

Node接口是DOM1級就定義了,Node接口定義了12個數值常量以表示每個節點的類型值。除了IE之外,所有瀏覽器都可以訪問這個類型。以下是常用的Node常量。
<script type="text/javascript">	//IE不支持,我們可以模擬一個類,讓IE也支持。	if (typeof Node == 'undefined') {		window.Node = {			ELEMENT_NODE:1,			ATTRIBUTE_NODE:2,			TEXT_NODE:3,			COMMENT_NODE:8,			DOCUMENT_NODE:9,			DOCUMENT_TYPE_NODE:10		};	}	console.log(Node.ELEMENT_NODE);//1	console.log(Node.ATTRIBUTE_NODE);//2	console.log(Node.TEXT_NODE);//3	console.log(Node.COMMENT_NODE);//8	console.log(Node.DOCUMENT_NODE);//9	console.log(Node.DOCUMENT_TYPE_NODE);//10</script>

Document類型

Document類型表示文檔,或文檔的根節點,而這個節點是隱藏的,沒有具體的元素標簽
//元素document.documentElement;//htmldocument.body;//bodydocument.doctype;//<!DOCTYPE>,ie8之前會返回null//屬性document.title;//獲取和設置<title>標簽的值document.URL;//獲取URL路徑document.domain;//獲取域名,服務器端document.referrer;//獲取上一個URL,服務器端//對象集合document.anchors;//獲取文檔中帶name屬性的<a>元素集合document.links;//獲取文檔中帶href屬性的<a>元素集合document.applets;//獲取文檔中<applet>元素集合,已不用document.forms;//獲取文檔中<form>元素集合document.images;//獲取文檔中<img>元素集合

Text類型

Text類型用于表現文本節點類型,文本不包含HTML,或包含轉義后的HTML。文本節點的nodeType為3
<script type="text/Javascript">	var box = document.createElement('div');	var text = document.createTextNode('Mr.');	var text2 = document.createTextNode('Lee!');	box.appendChild(text);	box.appendChild(text2);	document.body.appendChild(box);	console.log(box.childNodes.length);	//2,在同時創建兩個同一級別的文本節點的時候,會產生分離的兩個節點,其實是換行了		box.normalize();//合并成一個節點,其實是把換行去掉了	box.firstChild.splitText(3);//有合并就有分離,以三個字符為距離進行換行	//除了上面的兩種方法外,Text還提供了一些別的DOM操作的方法如下:	box.firstChild.deleteData(0,2);	//刪除從0位置的2個字符	box.firstChild.insertData(0,'Hello.');//從0位置添加指定字符	box.firstChild.replaceData(0,2,'Miss');//從0位置用Miss替換掉2個指定字符,如果第二個參數是0,則是添加Miss	box.firstChild.substringData(0,2);//從0位置獲取2個字符,直接輸出	console.log(box.firstChild.nodeValue);//Missllo..,輸出結果</script>

Comment類型

Comment類型表示文檔中的注釋。nodeType是8,nodeName是#comment,nodeValue是注釋的內容。
<script type="text/javascript">	console.log(document.body.firstChild.nodeType);//8	console.log(document.body.firstChild.nodeValue);//this is comment	//在IE中,注釋節點可以使用!當作元素來訪問。	//var comment = document.getElementsByTagName('!');</script>

DOM擴展

呈現模式

從IE6開始開始區分標準模式和混雜模式(怪異模式),主要是看文檔的聲明。IE為document對象添加了一個名為compatMode屬性,這個屬性可以識別IE瀏覽器的文檔處于什么模式如果是標準模式,則返回CSS1Compat,如果是混雜模式則返回BackCompat。
<script type="text/javascript">	if (document.compatMode == 'CSS1Compat') {		console.log(document.documentElement.clientWidth);	} else {		console.log(document.body.clientWidth);	}</script>后來Firefox、OperaChrome都實現了這個屬性。從IE8后,又引入documentMode新屬性,因為IE8有3種呈現模式分別為標準模式8,仿真模式7,混雜模式5。所以如果想測試IE8的標準模式,就判斷document.documentMode > 7 即可。

滾動

scrollIntoView(alignWithTop)  函數用來滾動瀏覽器窗口或容器元素,以便在當前視窗的可見范圍看見當前元素。如果alignWithTop為true,或者省略它,窗口會盡可能滾動到自身頂部與元素頂部平齊
<!DOCTYPE html><head>	<meta charset="UTF-8">	<title>Document</title></head><body>	<a onClick="onc()" hef="#">click here</a>	<div style="height:400px; background-color:blue"></div>	<div id="nn" style="background-color: red;height:900px;"></div></body><script type="text/javascript">	//作為一個事件的函數來被調用	function onc () {		var dd = document.getElementById("nn").scrollIntoView(true);//這個意思其實就是將這個元素滾動到瀏覽器窗口的頂部來顯示	}</script></html>

children屬性

由于子節點空白問題,IE和其他瀏覽器解釋不一致。雖然可以過濾掉,但如果只是想得到有效子節點,可以使用children屬性,幾乎所有瀏覽器都支持。
<!DOCTYPE html><head>	<meta charset="UTF-8">	<title>Document</title></head><body>	<div id="div">		<span>hello1</span>		<span>hello2</span>		<span>hello3</span>	</div></body><script type="text/javascript">	console.log(document.getElementById("div").children.length);//3	console.log(document.getElementById("div").children[0].innerHTML);//hello1</script></html>

contains()方法

判斷一個節點是不是另一個節點的后代,我們可以使用contains()方法。這個方法是IE率先使用的,開發人員無須遍歷即可獲取此信息
<script type="text/javascript">	var div = document.getElementById("div")	console.log(div.contains(div.firstChild));//true</script>早期的Firefox不支持這個方法,新版的支持了,其他瀏覽器也都支持,Safari2.x瀏覽器支持的有問題,無法使用。所以,必須做兼容在Firefox的DOM3級實現中提供了一個替代的方法compareDocumentPosition()方法。這個方法確定兩個節點之間的關系。
<script type="text/javascript">	var div = document.getElementById("div")	console.log(div.compareDocumentPosition(div.firstChild));//20</script>

DOM操作內容

innerText屬性

<!DOCTYPE html><head>	<meta charset="UTF-8">	<title>Document</title></head><body>	<div id="div">		<span>hello1</span>		<span>hello2</span>		<span>hello3</span>	</div></body><script type="text/javascript">	var div = document.getElementById("div")	console.log(div.innerText);//獲取文本內容(如有html直接過濾掉)	div.innerText = 'Mr.Lee';//設置文本(如有html轉義)	//DOM3新屬性	console.log(div.textContent)	div.innerText = '<html>';</script></html>

innerHTML屬性

<script type="text/javascript">	document.getElementById('div').innerHTML;//獲取文本(不過濾HTML)	document.getElementById('div').innerHTML = '<b>123</b>';//可解析HTML</script>雖然innerHTML可以插入HTML,但本身還是有一定的限制,也就是所謂的作用域元素,離開這個作用域就無效了
<script type="text/javascript">	document.getElementById("div").innerHTML = "<script>alert('Lee');</script"+">";//<script>元素不能被執行</script>

outerText屬性

outerText在取值的時候和innerText一樣,但是賦值方法相當危險,他不單替換了文本內容,還將元素直接抹去。
<!DOCTYPE html><head>	<meta charset="UTF-8">	<title>Document</title></head><body>	<div id="div">		<span>hello1</span>		<span>hello2</span>		<span>hello3</span>	</div></body><script type="text/javascript">	var div = document.getElementById("div")	console.log(div.outerText);//獲取文本內容(如有html直接過濾掉)	div.outerText = 'Mr.Lee';//設置文本(如有html轉義)	console.log(document.getElementById("div"));//null</script></html>

outerHTML屬性

outerHTML屬性在取值和innerHTML一致,但和outerText也一樣,很危險,賦值的之后會將元素抹去。
<script type="text/javascript">	var div = document.getElementById("div")	console.log(div.outerHTML);//獲取文本內容(如有html直接過濾掉)	div.outerHTML = '<b>124</b>';//設置文本(如有html轉義)	console.log(document.getElementById("div"));//null</script>關于最常用的innerHTML屬性和節點操作方法的比較,在插入大量HTML標記時使用innerHTML的效率明顯要高很多。因為在設置innerHTML時,會創建一個HTML解析器。這個解析器是瀏覽器級別的(C++編寫),因此執行JavaScript會快的多。但,創建和銷毀HTML解析器也會帶來性能損失。最好控制在最合理的范圍內,如下:
for (var i = 0; i < 10; i ++) {ul.innerHTML = '<li>item</li>';//避免頻繁}//改for (var i = 0; i < 10; i ++) {a = '<li>item</li>';//臨時保存}ul.innerHTML = a;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
红桃av永久久久| 亚洲第一天堂av| 久久乐国产精品| 精品久久久久久久久久ntr影视| 影音先锋欧美精品| 成人深夜直播免费观看| 国产精品r级在线| 久久在线精品视频| 91成人在线视频| 国产91成人video| 国外色69视频在线观看| 亚洲天天在线日亚洲洲精| 国产伊人精品在线| 欧美重口另类videos人妖| 亚洲国产精品网站| 97不卡在线视频| 国内外成人免费激情在线视频网站| 欧美黑人国产人伦爽爽爽| 欧美夫妻性生活视频| 国产成人精品免高潮费视频| 国产午夜精品全部视频在线播放| 亚洲色图18p| 这里只有精品久久| 国产精品天天狠天天看| 国产精品久久久久高潮| 久久精品视频网站| 亚洲一区二区中文字幕| 欧洲成人免费aa| 国产伦精品一区二区三区精品视频| 精品久久久久国产| 久久精品国产欧美激情| 欧美亚洲国产日本| 国产精品看片资源| 久久最新资源网| 国产91精品久久久久| 国产精品1234| 精品无人区乱码1区2区3区在线| 成人97在线观看视频| 国产高清视频一区三区| 欧美激情视频在线| 91爱视频在线| 中文字幕少妇一区二区三区| 久久夜精品香蕉| 国产精品偷伦一区二区| 欧美成人免费视频| 亚洲精品国精品久久99热| 亚洲精品网址在线观看| 精品成人乱色一区二区| 成人欧美一区二区三区黑人| 日韩综合中文字幕| 成人欧美一区二区三区黑人孕妇| 日韩在线播放视频| 日韩在线欧美在线国产在线| 亚洲一区二区少妇| 欧美日韩亚洲一区二区| 国产精品久久97| 97av在线播放| 午夜精品视频在线| 日韩av在线网| 亚洲欧美一区二区三区情侣bbw| 日韩av免费在线| 久久国产天堂福利天堂| 欧美专区在线观看| 日韩亚洲第一页| 国产一区二区三区高清在线观看| 一区二区在线免费视频| 性色av一区二区三区红粉影视| 亚洲视频在线免费看| 久久久久中文字幕| 3344国产精品免费看| 成人动漫网站在线观看| 欧美午夜精品久久久久久久| 日韩电影中文字幕av| 色777狠狠综合秋免鲁丝| 欧美激情精品久久久久久| 久久久爽爽爽美女图片| 国产精品福利在线观看| 国产一区视频在线播放| 在线观看国产精品日韩av| 亚洲人成在线免费观看| 国产精品日韩专区| 一本色道久久综合狠狠躁篇的优点| 精品综合久久久久久97| 欧美孕妇孕交黑巨大网站| 日韩在线国产精品| 亚洲午夜精品久久久久久久久久久久| 狠狠色狠狠色综合日日小说| 欧洲精品久久久| 欧美日韩国产精品一区二区不卡中文| 51久久精品夜色国产麻豆| 亚洲一区国产精品| 国产精品久久久久999| 欧美丰满少妇xxxx| 欧美亚洲视频在线看网址| 麻豆国产精品va在线观看不卡| 成人免费淫片aa视频免费| 91免费精品国偷自产在线| 亚洲欧洲在线播放| 91成人在线视频| 日韩欧美中文字幕在线观看| 日韩在线中文字| 国产亚洲精品久久久| 欧美电影免费在线观看| 亚洲福利视频二区| 欧美性20hd另类| 日韩在线一区二区三区免费视频| 2018中文字幕一区二区三区| 国产99视频在线观看| 久久久久久久久久久亚洲| 色综合久久悠悠| 97在线日本国产| 亚洲精品按摩视频| 国产精品情侣自拍| 日韩在线视频导航| 久久夜色精品亚洲噜噜国产mv| 国产精品大陆在线观看| 亚洲欧美成人精品| 亚洲一区二区在线播放| 欧美日韩中文字幕在线| 91av在线免费观看| 久久久精品网站| 欧美日韩性视频在线| 欧美激情影音先锋| 91久久久精品| 日韩欧美国产高清91| 国内精久久久久久久久久人| 成人h视频在线| 国产精品av免费在线观看| 国产精品久久综合av爱欲tv| 久久99久久99精品免观看粉嫩| 国内精品免费午夜毛片| 日韩av在线免费| 日本不卡高字幕在线2019| 日韩免费看的电影电视剧大全| 欧美福利视频网站| 久久精品电影网| 亚洲欧美日本伦理| 在线视频免费一区二区| 91免费看片网站| 欧美激情一级二级| 欧美日韩国产专区| 久久黄色av网站| 久久视频在线直播| 久久成年人视频| 亚洲欧美日韩一区二区在线| 日本高清+成人网在线观看| 亚洲天堂av高清| 国产亚洲一级高清| 国产精品一区久久| 久久久影视精品| 久久人人97超碰精品888| 欧美日韩精品在线视频| 久久这里只有精品视频首页| 久久久久久久国产精品| 17婷婷久久www| 不用播放器成人网| 欧美极品在线视频| 亚洲色图偷窥自拍| 亚洲人成电影网站色…| 国产亚洲视频在线| 欧美特级www| 精品色蜜蜜精品视频在线观看| 8x拔播拔播x8国产精品| 日韩亚洲精品电影|