WEB前端第二十九課——Document節點操作
1.Document節點
DOM全稱為DocumentObjectModel,即文件物件模型,是一套管理控制HTML文件的規則,而Document節點則是一種具象化的表現形式
如果把整個HTML文件看成一個物件,那麼這個物件就是Document節點,而如何操作控制這個物件的標準,就是DOM
DOM中規定HTML頁面中所有的元素都是節點,可以通過Document點號運算子呼叫所有元素
Document節點又被稱作Document物件,每個載入瀏覽器的HTML文件都會成為Document物件,document是HTML文件的根節點
因此,為了在指令碼(Script)中操作頁面,提出了Document節點和DOM規則
2.Document應用練習
<html lang="en"> <head> <meta charset="UTF-8"> <title>Document滾動標題練習</title> </head> <body> <script> setInterval(function () { var tempTitle=document.title; var titleArr=tempTitle.split(''); titleArr.push(titleArr.shift()); var newTitle=titleArr.join(''); document.title=newTitle; },600); </script> </body> </html>
JavaScript計時事件,兩個關鍵方法:
setInterval,間隔指定的毫秒數不停地執行指定程式碼
clearInterval() 方法用於停止 setInterval() 方法執行的函式程式碼
setTimeout,延遲指定的毫秒數後執行指定的程式碼
clearTimeout() 方法用於停止執行setTimeout()方法的函式程式碼
3.Document節點屬性
使用較多的屬性有以下三類
①doctype,documentElement,body,head,用於返回文件內部的某個節點
②documentURI,URL,domain,lastModified,location,title,readyState,用於返回文件指定的資訊
③anchors,forms,images,links,scripts,用於返回文件內部特定節點的集合
4.第一類屬性
①對於HTML文件來說,document物件一般有兩個子節點,第一個子節點就是docType(第二個是html)
docType節點是一個物件,包含了當前文件的型別資訊,對於HTML5文件來說,docType節點就代表<!DOCTYPE html>
語法:document .docType;
②documentElement屬性表示當前文件的根節點,通常是document的節點的第二個子節點,緊跟在document.docType節點後面
但是,一般情況下都是通過documentElement節點來訪問當前頁面中的其他子節點
語法:document .documentElement
③body屬性返回當前文件的body或frameset節點,如果不存在這樣的節點則返回null
語法:document .body;
④head屬性返回當前文件的head節點,如果當前文件有多個head,則返回第一個
語法:document .head;
5.第二類屬性
①documentURI屬性返回當前文件的網址,所有文件都具備該屬性
語法:document .documentURI
②URL屬性返回當前文件的網址,URL屬性只有HTML文件才具備,該屬性為只讀屬性不能寫入
語法:document .URL
③domain屬性返回當前文件的域名,如果無法獲取域名則返回null
語法:document .domain
④lastModified屬性返回當前文件(網頁)最後修改的時間戳,格式為字串
語法:document .lastModified
注意,lastModified屬性的返回值是字串,所以不能直接用於比較,如果要比較兩個文件哪一個時間更新,則需要將其轉換成時間戳格式
語法示例:Date.parse(doc1.lastModifyed),Date.parse方法能夠將時間格式的字串轉換成時間戳格式
⑤location屬性返回一個只讀物件,提供了當前文件的URL資訊
document.location.href,返回完整的URL,可以寫入(指定新網址)
document.location.protocol,返回當前遵守的協議
document.location.host,返回當前頁面域名+埠號
document.location.hostname,返回當前頁面域名
document.location.port,返回當前頁面埠號
document.location.pathname,返回當前頁面在伺服器中的路徑
document.location.search,返回當前頁面URL中的查詢字串
document.location.assign('網頁地址'),跳轉到另一個網址(與第一種的用法有相似之處)
⑥location其他內容
以下方法效果相同,都能改變當前頁面的URL
location.assign('傳遞一個URL');
window.location = '傳遞一個URL';
location.href = '傳遞一個URL';(常用方式)
reload():重新載入當前顯示的頁面
location.reload(false): //優先從本地快取重新載入
location.reload(true): //優先從伺服器重新載入
location物件的search屬性獲取URL中儲存的頁面提交的字串資訊
⑦title屬性返回當前文件的標題,該屬性是可寫的
語法:document.title
寫入資訊時:document.title = '寫入的標題';
⑧ characterSet屬性返回渲染當前文件的字符集,比如UTF-8、ISO-8859-1等
語法:document.characterSet
⑨readyState屬性返回當前文件的狀態,返回值包括三種:
loading,表示載入HTML程式碼階段,尚未完成解析
interactive,表示載入外部資源階段
complete,表示全部載入完成
<script> console.log(document.readyState); var stateCheck=setInterval(function () { console.log(document.readyState); if (document.readyState=='complete'){ clearInterval(stateCheck); } },500); </script>
6.第三類屬性
這些集合都是動態的,原節點有任何變化會立刻反映在集合中
①anchors屬性返回網頁中所有指定了name屬性的a標籤元素
②forms屬性返回網頁中所有的表單
③images屬性返回網頁中所有的圖片
④links屬性返回網頁中所有連結元素(帶有href屬性的a標籤)
⑤scripts屬性返回網頁中所有的指令碼
<body> <a href="#" name="anchorFirst">連結first</a> <a href="#" >連結second</a> <a href="#" name="anchorThird">連結third</a> <script> var coll=document.anchors; console.log(coll); //列印所有定義了 name屬性的 a標籤元素,返回值為結合 console.log(typeof coll); //返回值型別為 Object console.log(coll[1]); //列印指定的定義了 name屬性的 a標籤元素 </script> </body>
7.document選擇頁面元素
①querySelector()方法返回匹配指定的CSS選擇器的元素節點,
如果多個節點滿足匹配條件,則返回第一個匹配的節點
如果沒有滿足匹配條件的節點,則返回 null
語法:document .querySelector('元素選擇器 |類選擇器 |id選擇器');
②querySelectorAll()方法用來根據指定的選擇器進行頁面元素篩選
如果多個元素滿足匹配條件,則返回這些元素構成的集合
語法:document .querySelectorAll('選擇器名');
返回值為一個節點列表,不是陣列,但可以像陣列一樣使用列表
如果查詢失敗不是返回null,而是返回一個空的節點列表
③其他常用選擇方式
getElementById(),返回匹配指定id屬性的元素節點
getElementByTagName(),返回所有匹配指定標籤的元素節點
getElementByClassName(),返回符合指定類名的所有元素節點
getElementByName(),返回匹配指定 name屬性的所有元素節點
注意,上述方法中直接使用類名、id名等,並不是選擇器名!!
8.document建立頁面元素、屬性
①createElement(),生成HTML元素節點
語法:varnewElem=document .createElement(‘標籤名’); //所建立節點名需使用引號
注意,該方法建立的頁面元素不會直接顯示在頁面中,而是預設儲存在記憶體中
② appendChild(),通過該方法將建立的元素新增到頁面的指定父元素中
語法:父元素名 .appendChild(newElem);
③ createTextNode(),該方法用於對新建元素新增內容,方法的引數為需要生成的文字內容節點
語法:var elemText=document .createTextNode(' 需要新增的文字節點內容 ');
newElem .appendChild(elemText);
另外,還可以使用innerHtml屬性設定或返回雙標籤之間的HTML內容
語法:元素節點(變數名).innerHtml='text ';
④ createAttribute()方法用於建立屬性物件節點,返回值為屬性本身
語法:varelemStyle=document.createAttribute('屬性名');
elemStyle .value='color : red'; // 使用 .value對屬性賦值
⑤setAttributeNode()方法用於將屬性節點新增到元素中,進而實現元素的屬性設定
語法:newElem.setAttributeNode(elemStyle);
<script> var newElem=document.createElement('p'); //建立<p>標籤 var elemText=document.createTextNode('祝天下單身狗情人節快樂!'); //建立元素內容節點 newElem.appendChild(elemText); //將內容節點新增給<p>標籤 var elemAttrStyle=document.createAttribute('style'); //建立“style”屬性 // var elemAttrAlign=document.createAttribute('align'); //建立“align”屬性 elemAttrStyle.value=('color:red;text-align:center;font-size:25px'); //向“style”屬性賦值 // elemAttrAlign.value=('center'); //向“align”屬性賦值 newElem.setAttributeNode(elemAttrStyle); //將“style”屬性新增給<p>標籤 // newElem.setAttributeNode(elemAttrAlign); //將“align”屬性新增給<p>標籤 var body=document.querySelector('body'); //選擇頁面<body>標籤 body.appendChild(newElem); //將<p>標籤新增到頁面body中 </script>
9.操作元素屬性的方法
操作Element節點的CSS樣式,最簡單的方法之一是使用節點物件的以下三種方法,進行讀、寫、刪HTML元素的style屬性
① getAttribute(),獲取Element屬性,語法:元素節點 .getAttribute(' 屬性名 ');,返回值為屬性值
② setAttribute(),設定Element屬性,語法:元素節點 .setAttribute(' 屬性名 ' , '屬性值 ');
③ removeAttribute(),刪除Element屬性,語法:元素節點 .removeAttribute(' 屬性名 ');
10.元素節點的style屬性
Element節點本身也提供了style屬性用於操作CSS樣式,style屬性指向一個物件,用於讀寫頁面元素的行內CSS樣式
<script> var newElem=document.createElement('p'); //建立<p>標籤 var elemText=document.createTextNode('祝天下單身狗情人節快樂!'); //建立元素內容節點 newElem.appendChild(elemText); //將內容節點新增給<p>標籤 newElem.style.textAlign='center'; newElem.style.backgroundColor='hotpink'; newElem.style.borderBottom='2px solid darkgreen'; newElem.style.color='blue'; newElem.style.fontSize='25px'; newElem.style.cssFloat='none'; //float為JavaScript保留字 document.body.appendChild(newElem); //將<p>標籤新增到頁面body中 </script>
注意:元素的style物件對應元素的style屬性,style物件中的樣式與style屬性中的樣式名稱是一一對應的,但書寫規則有一定差別
①將橫槓(-)從CSS屬性命中去除,然後將橫崗後的第一個字母大寫;
②CSS屬性名是JavaScript保留字的,需要在屬性名之前加“css”字串字首;
③style物件的屬性值都是字串,包括計量單位
11.style屬性的cssText用法
style物件的cssText屬性可以用來直接讀、寫、刪整個 style屬性
語法:元素節點 .style .cssText=' 樣式 ';
<script> var newElem=document.createElement('p'); //建立<p>標籤 var elemText=document.createTextNode('祝天下單身狗情人節快樂!'); //建立元素內容節點 newElem.appendChild(elemText); //將內容節點新增給<p>標籤 newElem.style.cssText='text-align:center;color:blue;font-size:25px;border-bottom:2px solid darkgreen'; document.body.appendChild(newElem); //將<p>標籤新增到頁面body中 </script>
刪除整個style屬性可以使用<元素節點 .cssText=' ' >這種方式
cssText對應的是HTML元素的style屬性,所以在書寫時不需要改寫屬性名
12.style屬性方法
style物件提供了三種方法分別讀、寫、刪行內樣式
① setProperty(),設定樣式,語法:元素節點 .style .setProperty('propertyName ' , 'value');
② getPropertyValue(),獲取樣式,語法:元素節點 .style .getPropertyValue('propertyName ');
③ removeProperty(),刪除樣式,語法:元素節點 .style .removeProperty('propertyName ');
<script> var newElem=document.createElement('p'); //建立<p>標籤 var elemText=document.createTextNode('祝天下單身狗情人節快樂!'); //建立元素內容節點 newElem.appendChild(elemText); //將內容節點新增給<p>標籤 var elemStyle=newElem.style; elemStyle.setProperty('text-align','center'); var queryRes=elemStyle.getPropertyValue('text-align'); console.log(queryRes); elemStyle.removeProperty('text-align'); document.body.appendChild(newElem); //將<p>標籤新增到頁面body中 </script>