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

首頁 > 語言 > JavaScript > 正文

JavaScript學習筆記之DOM基礎 2.4

2024-05-06 16:24:28
字體:
來源:轉載
供稿:網友

DOM(Document Object Model),即“文檔對象模型”?;谡Z義的邏輯結構,DOM將網頁內的元素與內容呈現為一個清晰、易讀的樹狀模型,下面小編把最近整理有關javascript筆記之DOM基礎分享給大家,有需要的朋友可以參考下

DOM的發展,與WEB標準化的大趨勢相關甚密。只有基于正確的語義邏輯,DOM才能正確地發揮其功用。如今,正確的語義結構、表現與內容分離等要求,都已經成為網頁設計中的基本要求。因此,在網頁前端開發中,DOM的存在,無疑是為表現層、行為層甚至內容層面的連接提供了一個絕佳的API,成為熱門的Ajax應用中不可或缺的組成部分。

一、平穩退化

1、概念

早期,在未使用JavaScript之前,網頁中的內容可以正常顯示出來,用戶可以通過外設(如鼠標)操控瀏覽到相關內容,這種瀏覽體驗對用戶而言可能并不理想。

根據這個需求,內容的提供方就有了合理化目標——那就是在不影響內容展示的前提下,使用JavaScript來改善用戶體驗,提高用戶粘性。

在這個標目中,有個非常明顯的條件,就是不能影響內容的正常展示,換言之,即使用戶的瀏覽器不支持JavaScript,也能保證用戶可以正常瀏覽。

2、方法

①將JavaScript與HTML分離

這是首先應該想到的,讓兩者分離,HTML就像回到早期未使用JavaScript之前的狀態,干爽如初啊。

譬如將element.onClick之類的事件處理函數寫進JavaScript中,與某函數進行綁定。

②對JavaScript中的方法進行檢測

之前提到的一些方法,如getElementById之類,都需要去判定該方法是否支持。

 

  1. <script> 
  2. if(! document.getElementById) return false
  3. </script> 

通過if語句這種方式來檢測是否支持該方法,如果支持,可以繼續,不支持,直接返回false,這樣就沒必要耽誤功夫了,也起到了性能優化的作用。

二、綁定onload事件

1、綁定緣由

一些函數需要在頁面加載完全之后才能有效執行,我們需要將函數綁定到window.onload這個事件上。

 

 
  1. <!doctype html> 
  2. <html> 
  3. <head> 
  4. <meta charset="utf-8"
  5. <title>筱雨生 - 博客園</title> 
  6. <script> 
  7. function tagAttribute(){ 
  8. var ali = document.getElementsByTagName('li');  
  9. for(var i = 0; i < ali.length; i++){ 
  10. if(ali[i].firstChild.nodeType == 3){ 
  11. alert(ali[i].childNodes[0].nodeValue); 
  12. window.onload = tagAttribute; 
  13. </script> 
  14. </head> 
  15. <body> 
  16. <h1>筱雨生</h1> 
  17. <p>時光飛逝,莫讓網絡蹉跎了歲月</p> 
  18. <div id="myBlog"
  19. <ul> 
  20. <li title="JavaScript">JavaScript</li> 
  21. <li title="HTML">HTML</li> 
  22. <li title="CSS">CSS</li> 
  23. <li title="我的隨筆">我的隨筆</li> 
  24. <li></li> 
  25. </ul> 
  26. </div> 
  27. </body> 
  28. </html> 

在上面這個實例中,如果不綁定window.onload,執行函數tagAttribute將會毫無意義。

還需要注意一點,綁定的是函數,而不是這個函數的值,所以后面不帶圓括號。

2、綁定方法

如果你只需要綁定一個函數,那么上面的方法完全可以輕松實現你的目的。

 

 
  1. window.onload = myFunction; 

如果是多個,也許你會去一個個的綁定,可是,這樣做的結果是只有最后一個函數才會被有效執行,關于這一點其實很好理解。

我們的目的是,不管頁面中加載完畢時執行多少個函數,這些函數都可以有效執行,也就是說,這些函數都被成功綁定window.onload事件。

 

 
  1. <!doctype html> 
  2. <html> 
  3. <head> 
  4. <meta charset="utf-8"
  5. <title>筱雨生 - 博客園</title> 
  6. <script> 
  7. function addOnLoadEvent(func){ 
  8. var oldonload = window.onload; // 把現有的window.onload事件處理函數的值存儲到變量oldonload 
  9. if(typeof window.onload != 'function'){ // 如果這個處理函數上還沒有綁定任何函數 
  10. window.onload = func; // 將這個函數綁定到window.onload事件 
  11. }else
  12. window.onload = function(){ // 如果這個處理函數已經綁定了函數,就把這個函數追加到指令的末尾 
  13. oldonload(); 
  14. func(); 
  15. //自定義函數 tagAttribute  
  16. //功能:獲取li標簽中的title值 
  17. function tagAttribute(){ 
  18. var ali = document.getElementsByTagName('li');  
  19. for(var i = 0; i < ali.length; i++){ 
  20. if(ali[i].childNodes[0].nodeType == 3){ 
  21. alert(ali[i].childNodes[0].nodeValue); 
  22. addOnLoadEvent(tagAttribute); // 為tagAttribute函數綁定到window.onload事件 
  23. </script> 
  24. </head> 
  25. <body> 
  26. <h1>筱雨生</h1> 
  27. <p>時光飛逝,莫讓網絡蹉跎了歲月</p> 
  28. <div id="myBlog"
  29. <ul> 
  30. <li title="JavaScript">JavaScript</li> 
  31. <li title="HTML">HTML</li> 
  32. <li title="CSS">CSS</li> 
  33. <li title="我的隨筆">我的隨筆</li> 
  34. <li></li> 
  35. </ul> 
  36. </div> 
  37. </body> 
  38. </html> 

javascript學習筆記 Dom知識點總結

JavaScript的window對象對應著瀏覽器窗口本身,因此這個對象的屬性和方法統稱為BOM(瀏覽器對象模型),如window.open(),window.location等。

JavaScript的document對象是指文檔對象模型,主要是處理網頁內容。DOM(Document Object Model)即文檔對象模型,是針對 HTML 和 XML 文檔的 API 。字母D指document(文檔),字母O指object(對象),字母指Model(模型)。DOM 描繪了一個層次化的節點樹。節點表示一個連接點,文檔是由節點構成的集合,DOM的節點主要分為三類:元素節點、文本節點(不是文本內容)、屬性節點。

獲取節點的名稱和類型

1.nodeName屬性用來獲取節點的名稱,文本節點返回#text,元素節點返回標簽名稱(此時等價于tagName)。語法:目標節點.nodeName

2.nodeType屬性用來獲取節點的類型,元素節點:1,屬性節點:2,文本節點:3。語法:目標節點.nodeType

3.nodeValue屬性用來獲取和設置節點的值。元素節點返回 null 。語法:目標節點.nodeValue

獲取元素節點的方式

1. document.getElementById

通過ID查找,返回唯一元素節點

2. document.getElementsByName

通過name屬性查找,返回元素節點數組

3. document.getElementsByTagName

通過標簽名稱查找,返回元素節點數組

以下三種方法屬于HTML5 DOM,并非所有瀏覽器支持(如某些低版本IE就不支持),屬于高級方法

4. document.getElementsByClassName

通過class屬性的類名查找,返回元素節點數組

5. document.querySelector

通過selector條件獲取元素節點,只返回符合條件的第一個元素節點

6. document.querySelectorAll

通過selector條件獲取元素節點,返回所有符合條件的元素節點數組,多條件使用逗號分隔,表示要查找的元素必須符合所有逗號分隔的條件,如果一個元素只符合逗號分隔的條件中的一個,則不會被返回

小結: getElementById和querySelector只返回一個元素節點,而getElementsByName、getElementsByTagName、getElementsByClassName、querySelectorAll返回的是元素節點數組

節點指針

1.childNodes屬性用來獲取元素節點的子節點,返回節點數組。語法:父節點.childNodes;

2.children屬性可以用來獲取忽略了空白節點的有效節點(在某些瀏覽器上,空白符或換行符也是一個文本節點)。語法:父節點.children;

3.firstChild屬性可以用來獲取元素的第一個子節點,等價于 childNodes[0]。語法:父節點.firstChild;

3.lastChild屬性可以用來獲取元素的最后一個子節點,等價于 childNodes[childNodes.length-1]。語法:父節點.lastChild;

4.previousSibling屬性用來獲取目標節點的前一個兄弟節點。語法:目標節點.previousSibling;

5.nextSibling屬性用來獲取目標節點的后一個兄弟節點。語法:目標節點.nextSibling;

6.parentNode屬性用來獲取已知節點的父節點。語法:子節點.parentNode;

7.ownerDocument屬性用來當前節點所在文檔的根節點,等價于document。語法:目標節點.ownerDocument;

節點的操作

1.createElement方法用來創建元素節點。語法:document.createElement('元素標簽名稱');

2.createAttribute方法用來創建屬性節點。語法:document.createAttribute('屬性名稱');

3.createTextNode方法用來創建文本節點。語法:document.createTextNode('文本內容');

4.appendChild方法用來在目標節點的子節點的末尾添加一個子節點(可以是createElement創建的元素節點,也可以是createTextNode創建的文本節點)。語法:parent.appendChild(要插入的節點);

5.insertBefore方法用來在目標元素的前面插入一個新元素節點,此時的指針在目標元素的父級上。語法:parent.insertBefore(newElement,targetElement);

6.DOM中沒有insertAfter這個方法,但是可以通過以下方法來模擬insertAfter;

 

 
  1. /* 
  2. * newElement : 要插入的新元素 
  3. * targetElement : 目標元素  
  4. */ 
  5. function insertAfter(newElement,targetElement){ 
  6. var parent = targetElement.parentNode; 
  7. if(parent.lastChild == targetElement){ 
  8. /* 
  9. 如果目標元素是parent的最后一個子元素,則把新元素追加到parent元素上, 
  10. 也就是在parent的子元素的末尾位置添加新元素  
  11. */ 
  12. parent.appendChild(newElement); 
  13. }else
  14. /* 
  15. 否則,就把新元素添加到目標元素和目標元素的下一個兄弟元素之間  
  16. */ 
  17. parent.insertBefore(newElement,targetElement.nextSibling); 

7.replaceChild方法用來替換一個元素節點,此時的指針在目標元素的父級上。語法:parent.replaceChild(replaceElement,targetElement);

8.cloneChild方法用來克隆一個元素節點,傳遞一個布爾參數,參數為true時表示復制當前節點及其所有子節點,參數為false時表示支付至當前節點。語法:目標元素.cloneChild(true|false);

9.removeChild方法用來刪除一個指定節點。語法:removeChild(要刪除的節點);

10.getAttribute方法用來獲取一個屬性的值。語法:目標元素.getAttribute(元素屬性名稱);

11.setAttribute方法用來設置一個屬性的值,沒有該屬性則創建。語法:目標元素.setAttribute(元素屬性名稱,屬性值);

12.removeAttribute方法用來刪除一個屬性節點。語法:目標元素.removeAttribute(要刪除的屬性名稱);

DOM操作內容

1.innerHTML屬性用來獲取和設置HTML內容。語法:元素節點.innerHTML 或者 元素節點.innerHTML = 'HTML字符串';

2.innerText|textContent屬性用來獲取和設置文本內容。fireFox使用textContent來獲取和設置(注意兼容性)。語法:元素節點.innerText 或者 元素節點.innerText = 'HTML字符串';

DOM操作樣式

1.style屬性用來獲取和設置元素的行內樣式。語法:element.style;style屬性只能獲取和設置行內樣式,對于如font-size這種樣式屬性,應該去掉 - 并且將 - 后面的第一個字母大寫,駝峰法來獲取和設置 如:element.style.fontSize , element.style.backgroundColor

2.getComputedStyle全局方法用來獲取計算后的樣式,第一個參數是元素節點,第二個參數是類型,如:hover,:active等偽類,默認情況下傳 null ,某些IE版本使用currentStyle屬性來獲取 box.currentStyle。語法:window.getComputedStyle(元素,類型)

3.className屬性用來獲取和設置元素的樣式名稱。語法:element.className

4.自定義的 addClass() | hasClass() | removeClass() 方法

 

 
  1. //元素是否含有某樣式 
  2. function hasClass(element,className){ 
  3. return !!element.className.match(new RegExp('(//s|^)'+className+'(//s|$)')); 
  4. //向元素添加新樣式 
  5. function addClass(element,className){ 
  6. if(hasClass(element,className) == false){ 
  7. element.className += ' '+className; 
  8. //移除元素的指定樣式 
  9. function removeClass(element,className){ 
  10. var currentClass = element.className; 
  11. if(hasClass(element,className)){ 
  12. currentClass = currentClass.replace(new RegExp('(//s|^)'+className+'(//s|$)'),' '); 
  13. //去除空格 
  14. currentClass = currentClass.replace(/(^/s*)|(/s*$)/g,''); 
  15. element.className = currentClass; 

DOM操作位置和大小

1.clientWidth屬性用來獲取元素的實際寬度,該值受滾動條和內邊距影響,外邊距和border不會影響。語法:

element.clientWidth;

2.clientHeight屬性用來獲取元素的實際高度,該值受滾動條和內邊距影響,外邊距和border不會影響。語法:

element.clientHeight;

3.offsetWidth屬性用來獲取元素的實際寬度,該值受邊框和內邊距影響,外邊距和滾動條不會影響。語法:

element.offsetWidth;

4.offsetHeight屬性用來獲取元素的實際高度,該值受邊框和內邊距影響,外邊距和滾動條不會影響。語法:

element.offsetHeight;

5.offsetTop和offsetLeft屬性用來獲取元素相對于父級的位置。該值受外邊距影響。語法:element.offsetTop ||

element.offsetLeft;

6.scrollTop和scrollLeft屬性用來獲取滾動條被隱藏的區域大小,也可設置定位到該區域(比如返回頂部)。語法:

element.scrollTop || element.scrollLeft || element.scrollTop = 0;

常用到的簡潔快速的document屬性和方法

document.title 用來獲取文檔標題

document.domain 用來獲取當前域名

document.URL 用來獲取當前url路徑

document.forms 獲取表單集合

document.images 獲取圖片集合

document.body 獲取body元素節點

document.compatMode 識別文檔模式

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频yy9099| 国产精品第二页| 日本国产精品视频| 一区二区亚洲精品国产| 亚洲视频免费一区| 日韩大陆欧美高清视频区| 欧美激情按摩在线| 最新亚洲国产精品| 国产精品久久久久影院日本| 日韩av资源在线播放| 欧美激情综合色综合啪啪五月| 日韩女在线观看| 日韩在线视频观看正片免费网站| 尤物九九久久国产精品的分类| 夜夜嗨av一区二区三区四区| 国产成人精品亚洲精品| 欧美性猛交xxxx免费看| 成人免费高清完整版在线观看| 韩剧1988免费观看全集| 97免费在线视频| 日韩视频在线一区| 国产精品丝袜一区二区三区| 久久久久国产精品www| 欧美激情久久久久久| 亚洲精品v天堂中文字幕| 国产精品九九久久久久久久| 国产精品jvid在线观看蜜臀| 久久久视频免费观看| 亚洲变态欧美另类捆绑| 欧美最猛性xxxxx(亚洲精品)| 97香蕉久久夜色精品国产| 成人黄色免费片| 欧美高清第一页| 91精品国产高清久久久久久91| 欧美日韩国产在线看| 亚洲美腿欧美激情另类| 精品美女国产在线| 国产精品日韩在线| 欧美激情videos| 欧美成人精品一区| 国产美女精品视频| 黑人极品videos精品欧美裸| 日韩免费av一区二区| 91精品国产九九九久久久亚洲| 日韩欧美在线视频| 欧美成在线视频| 亚洲黄色www| 欧美激情在线播放| 一区二区三区美女xx视频| 美女久久久久久久久久久| 亚洲欧美日韩一区二区在线| 97超级碰碰碰| 国内精品久久久久影院 日本资源| 日韩精品在线影院| 国产精品av电影| 中文字幕亚洲综合久久筱田步美| 精品中文字幕久久久久久| 欧美精品videossex性护士| 国内精品久久久久久影视8| 性欧美激情精品| 91精品久久久久久综合乱菊| 亚洲国产欧美一区二区三区久久| 精品国产网站地址| 日本一欧美一欧美一亚洲视频| 色午夜这里只有精品| 亚洲综合中文字幕68页| 26uuu日韩精品一区二区| 精品国内亚洲在观看18黄| 国产成人avxxxxx在线看| 欧美日韩亚洲精品一区二区三区| 福利精品视频在线| 欧美亚洲成人网| 久久天堂av综合合色| 欧美xxxwww| 日韩欧美精品在线观看| 欧美大成色www永久网站婷| 国产精品情侣自拍| 国内精品久久影院| 亚洲视频在线免费看| 蜜月aⅴ免费一区二区三区| 上原亚衣av一区二区三区| 久久伊人免费视频| 国产mv免费观看入口亚洲| 欧美激情精品久久久久久久变态| 奇米影视亚洲狠狠色| 最近中文字幕2019免费| 777午夜精品福利在线观看| 久久精品中文字幕免费mv| 日本成人精品在线| 亚洲精品国产拍免费91在线| 中文字幕av一区二区三区谷原希美| 亚洲国产成人91精品| 欧美日韩国产中文精品字幕自在自线| 久久久久成人精品| 精品久久香蕉国产线看观看亚洲| 久久视频在线观看免费| 国产精品尤物福利片在线观看| 亚洲精品中文字幕女同| 国产精自产拍久久久久久| 亚洲3p在线观看| 日韩精品视频在线观看免费| 最近中文字幕mv在线一区二区三区四区| 日韩精品一区二区三区第95| 日本不卡高字幕在线2019| 欧美理论电影在线观看| 国产一区二区在线免费视频| 亚洲人成电影在线| 久久中文精品视频| 91精品在线一区| 亚洲区在线播放| 亚洲成人教育av| 欧美成人精品不卡视频在线观看| 日韩av影院在线观看| 日韩免费在线电影| 欧美日韩午夜视频在线观看| 7m精品福利视频导航| 在线视频欧美性高潮| 久久久精品国产亚洲| 中文字幕成人精品久久不卡| 韩国欧美亚洲国产| 久久人人爽人人爽人人片亚洲| 久久天堂av综合合色| 国产精品爽黄69| 一本色道久久88亚洲综合88| 另类专区欧美制服同性| 国产精品人成电影在线观看| 亚洲男人天堂九九视频| 色噜噜狠狠狠综合曰曰曰88av| 亚洲精品视频在线观看视频| 亚洲综合精品一区二区| 国产一区二区三区日韩欧美| 日本免费在线精品| 亚洲夜晚福利在线观看| 92国产精品视频| 精品自在线视频| 日韩精品一区二区三区第95| 久久久久久久av| 久久6免费高清热精品| 久久免费精品日本久久中文字幕| 久久久国产成人精品| 日韩欧美亚洲范冰冰与中字| 日韩电影中文 亚洲精品乱码| 久久久成人精品| 亚洲人成电影在线播放| 久久精品久久精品亚洲人| 一区二区亚洲欧洲国产日韩| 精品中文字幕久久久久久| 欧美自拍视频在线| 亚洲精品狠狠操| 久久久亚洲国产天美传媒修理工| 亚洲色图第三页| 亚洲丁香久久久| 欧美劲爆第一页| 亚洲人成网站色ww在线| 亚洲视频网站在线观看| 成人羞羞国产免费| 2021久久精品国产99国产精品| 国产日韩欧美自拍| 欧美国产视频一区二区| 国产成人91久久精品| 亚洲欧美国产一区二区三区| 久久人人爽人人爽人人片亚洲| 大伊人狠狠躁夜夜躁av一区| 欧美精品第一页在线播放|