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