摘要:在瀏覽器中,對象是繼承自類型的一個實例,表示整個頁面。一致性檢測屬性提供相應信息和功能的對象,與瀏覽器對的實現直接對應。在中,標簽名始終都以全部大寫表示而在有時包括,標簽名始終與源代碼中的保持一致。設置的特性名統一轉為小寫。
簡介
DOM描述了一個層次化的節點樹,允許開發人員添加、移除和修改頁面。
節點根據 W3C 的 HTML DOM 標準,HTML 文檔中的所有內容都是節點:
整個文檔是一個文檔節點
每個 HTML 元素是元素節點
HTML 元素內的文本是文本節點
每個 HTML 屬性是屬性節點
注釋是注釋節點
每個節點都有一個nodeType屬性,用于表明節點的類型。并不是所有節點類型都受到Web瀏覽器支持,最常用的事元素和文本節點。
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);
因為IE沒有公開Node類型的構造函數,所以確定節點類型如下:
// nodeType 是只讀的 if (someNode.nodeType == 1) { alert("Node is an element"); }Node類型
1、nodeName 和 nodeValue 屬性
// 使用前先檢查節點類型,確認是否是一個元素,對于元素節點 // nodeName 保存的是標簽名(節點的名稱),nodeValue = null (節點的值); if (someNode.nodeType == 1) { value = someNode.nodeName; // nodeName的值是元素的標簽名 }
2、 節點關系
每個節點都有一個 childNodes 屬性,保存著一個 NodeList 對象。
是一個數組對象,保存一組有序的節點,可以通過位置訪問節點。有length屬性,但不是數組實例。
基于DOM結構動態執行查詢結果,結構的變化能夠自動反應著NodeList對象中。
可以用 item() 方法訪問其中的節點。
var firstChild = someNode.childNodes[0]; var secondChild = someNode.childNodes.item(1); // 將NodeList對象轉化為數組 function convertToArray(nodes) { var array = null; try { array = Array.prototype.slice.call(node,0); // 針對非 IE 瀏覽器 } catch { array = new Array(); for (var i=0, len=nodes.length; I < len; i++) { array.push(nodes[I]); } } return array; }
parentNode 屬性:指向文檔樹中的父節點
父節點的 firstChild 和 lastChild 屬性指向第一個和最后一個
previousSibling: 上一個同胞節點
nextSibling: 下一個同胞節點
hasChildNodes(): 節點包含一個或多個子節點返回 true
ownerDocument: 指向表示整個文檔的文檔節點
document.documentElement - 全部文檔
document.body - 文檔的主體
3、操作節點
以下方法都需要取得父節點(使用 parentNode 屬性)
appendChild(): 向 childNodes 列表末尾添加一個節點。如果已存在,從原來位置移動到新位置
insertBefore(): 插入節點,接受兩個參數,要出入的節點和參考節點(誰的前面)
replaceChild(): 替換節點,接受兩個參數,要插入的節點和要替換的節點
removeChild(): 移除節點
以下兩個方法是所有類型的節點都有
cloneNode(): 創建節點的副本,參數為true,復制節點及整個子節點樹,false只復制節點本身,沒有父節點,需要用上面方法添加到文檔中
normalize(): 處理文檔樹中的文本節點??赡軙霈F文本節點不包含文本,或者接連出現兩個文本節點。調用這方法,如果找到空文本,則刪除;找到相鄰文本節點,則合并為一個
Document 類型JavaScript通過 Document 類型表示文檔。在瀏覽器中,document 對象是 HTMLDocument(繼承自 Document 類型)的一個實例,表示整個HTML頁面。而且 document 也是 window 對象的一個屬性,因此可以將其作為全局對象來訪問。通過這個文檔對象,不僅可以取得與頁面有關的信息,而且還能操作頁面的外觀及其底層結構。
nodeName 的值為 “#document”;
nodeValue 的值為 null;
parentNode 的值為 null;
ownerDocument 的值為 null;
其子節點可能是一個 DocumentType(最多一個)、Element(最多一個)、ProcessingInstruction 或 Comment。
1、文檔的子節點
內置的訪問子節點的快捷方式:
documentElement 屬性:始終指向HTML頁面的元素
childNodes 列表訪問文檔元素
作為內置的HTMLDocument對象,document 對象有一個 body 屬性,直接指向
元素。// 所有瀏覽器都支持 var html = document.documentElement; // 取得對對引用 var body = document.body; // 取得對對引用
用不著在 document 對象上調用 appendChild()、removeChild()和replaceChild()方法,因為文檔類型(如果存在)是只讀的,而且它只能有一個元素子節點(通常早存在)。
2、文檔信息
document 對象還有一些標準的Document對象所沒有的屬性。這些對象表現的網頁的一些信息。
// 取的文檔標題 var originalTitle = document.title; // 設置文檔標題 document.title = "New page title"; // 取得完成的URL var url = document.URL; // 取的域名 var domain = document.domain; // 取的來源頁面的URL var referrer = document.referrer;
只有 domain 可以設置,如果包含子域名,不能設置為URL中不包含的域。
由于跨域安全限制,來自不同子域的頁面無法通過 Javascript 通信,可以將每個頁面的document.domain設置為相同值,就可以互相訪問對方包含的JavaScript對象了。
如果域名一開始是“松散的”,就不能設為“緊繃的”,設為“wrox.com”,就不能設為“p2p.wrox.com”。
3、查找元素
取得特定的某個或某組元素的引用,然后執行一些操作。
getElementById(): 要獲取的元素 id,返回第一個出現的,如果沒找到返回 null
getElementsByTagName(): 參數(要取得元素的標簽名),返回包含零個或多個元素的 NodeList。在HTML文檔中,返回一個 HTMLCollection 對象,作為動態集合。傳入“*”,取得文檔中的所有元素
getElementsByName(): 返回給定 name 特性的所有元素。最常用取得單選按鈕(單選按鈕必須具有相同的 name 特性)
// 取得頁面中所有的元素,并返回一個HTMLCollection var images = document.getElementsByTagName("img"); alert(images.length); // 圖像的數量 alert(images[0].src); // 第一個圖像元素的src特性 alert(images.item(0).src); // 第一個圖像元素的src特性
HMTLCollection 對象
有一個 namedItem() 方法,可以通過元素的 name 特性取得集合中的項
支持按名稱訪問項
var myImage = images.namedItem("myImage"); var myImage = images["myImage"];
4、特殊集合
除了屬性和方法,document 對象還有一些特殊的集合,都是 HTMLCollection對象,
document.anchors ,包含文檔中所有帶 name 特性的 元素;
document.applets ,所有的
document.forms ,文檔中所有的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96607.html
摘要:然而,雖然先生對無所不知,被譽為世界的愛因斯坦,但他的語言精粹并不適合初學者學習。即便如此,在后面我還是會建議把當做補充的學習資源。但目前為止,依然是學習編程的好幫手。周正則表達式,對象,事件,閱讀權威指南第,,,章。 既然你找到這篇文章來,說明你是真心想學好JavaScript的。你沒有想錯,當今如果要開發現代網站或web應用(包括互聯網創業),都要學會JavaScript。而面對泛...
摘要:持續集成單元測試是開源的一個基于的測試執行過程管理工具。表示測試套件,是一序列相關程序的測試表示單元測試,也就是測試的最小單位。 持續集成 單元測試(unit) karma Karma 是Google開源的一個基于Node.js 的 JavaScript 測試執行過程管理工具(Test Runner)。該工具可用于測試所有主流Web瀏覽器,也可集成到 CI (Continuous in...
摘要:原文鏈接恰當地學習適合第一次編程和非的程序員持續時間到周前提無需編程經驗繼續下面的課程。如果你沒有足夠的時間在周內完成全部的章節,學習時間盡力不要超過周。你還不是一個絕地武士,必須持續使用你最新學到的知識和技能,盡可能地經常持續學習和提高。 原文鏈接:How to Learn JavaScript Properly 恰當地學習 JavaScript (適合第一次編程和非 JavaSc...
摘要:最近一周一直都在折騰一些項目中常用的記錄下來,以后免去簡單的配置再去查文檔。常規入口指示應該使用哪個模塊,來作為構建其內部依賴圖的開始。把代碼轉換成,在使用語言中有介紹。擴展語法,使用下一代,在使用中有介紹。用于忽略部分文件。 最近一周一直都在折騰webpack,一些項目中常用的記錄下來,以后免去簡單的配置再去查文檔。 常規 1.入口 指示 webpack 應該使用哪個模塊,來作為構建...
摘要:當用戶滾動頁面時,合成線程會通知主線程更新頁面中最新可見部分的位圖。但是,如果主線程響應地不夠快,合成線程不會保持等待,而是馬上繪制已經生成的位圖,還沒準備好的部分用白色進行填充。 動畫做多了,自然就要考慮性能,我打算出一個系列的日志,詳細的講解一下網頁動畫性能相關的知識,如果你已經可以運用css3 canvas來做動畫,可以來參考一下。 目前我做的最復雜的動畫就是360搜索中PC端的...
閱讀 3725·2021-11-17 09:33
閱讀 2750·2021-09-22 15:12
閱讀 3354·2021-08-12 13:24
閱讀 2451·2019-08-30 11:14
閱讀 1740·2019-08-29 14:09
閱讀 1331·2019-08-26 14:01
閱讀 3069·2019-08-26 13:49
閱讀 1784·2019-08-26 12:16