摘要:中的所有對(duì)象都是以對(duì)象的形式實(shí)現(xiàn)的。這意味著中的對(duì)象與原生對(duì)象的行為或活動(dòng)特點(diǎn)并不一致。該屬性指向表示整個(gè)文檔的文檔節(jié)點(diǎn)。同時(shí)由要插入的節(jié)點(diǎn)占據(jù)其位置。返回被移除的節(jié)點(diǎn)。操作類名操作類名時(shí),需要通過(guò)屬性添加刪除和替換類名。
Note:IE中的所有DOM對(duì)象都是以COM對(duì)象的形式實(shí)現(xiàn)的。這意味著IE中的DOM對(duì)象與原生Javascript對(duì)象的行為或活動(dòng)特點(diǎn)并不一致。
DOM1級(jí)主要定義了HTML和XML的文檔的底層結(jié)構(gòu)。DOM2和DOM3級(jí)分為幾個(gè)模塊。
DOM2級(jí)核心(DOM Level 2 Core):在1級(jí)核心基礎(chǔ)上構(gòu)建,為節(jié)點(diǎn)添加了更多方法和屬性
DOM2級(jí)視圖(DOM Level 2 Views):為文檔定義了基于樣式信息的不同視圖
DOM2級(jí)事件(DOM Level 2 Events):說(shuō)明了如何使用事件與DOM文檔交互
DOM2級(jí)樣式(DOM Level 2 Style):定義了如何以編程方式來(lái)訪問(wèn)和改變CSS樣式信息
DOM2級(jí)遍歷和范圍(DOM Level 2 Tranversal and Range):引入了遍歷DOM文檔和選擇其特定部分的新接口。
DOM2級(jí)HTML(DOM Level 2 HTML):在1級(jí)HTML基礎(chǔ)上構(gòu)建,添加了更多屬性、方法和新街口。
// 判斷是否支持模塊 var DOM2Core = document.implementation.hasFeature("Core",2.0)DOM2級(jí)核心 Node
DOM1級(jí)定義了一個(gè)Node接口。該接口將由DOM中的所有節(jié)點(diǎn)類型實(shí)現(xiàn)。
Javascript中的所有節(jié)點(diǎn)類型都 繼承自Node類型,因此所有節(jié)點(diǎn)類型都共享著相同的基本屬性和方法。
兼容性:除IE外,其他所有瀏覽器都可以訪問(wèn)到這個(gè)類型
節(jié)點(diǎn)類型每個(gè)節(jié)點(diǎn)都有一個(gè)nodeType屬性,用于表明節(jié)點(diǎn)的類型。
節(jié)點(diǎn)類型由在Node類型中定義的12個(gè)數(shù)值常量來(lái)表示,下面列出常用的幾個(gè)。
Node.ELEMENT_NODE: 1
Node.TEXT_NODE: 3
Node.COMMENT_NODE: 8
節(jié)點(diǎn)信息可以通過(guò)nodeName和nodeValue來(lái)了解節(jié)點(diǎn)信息。這兩個(gè)屬性取決于節(jié)點(diǎn)的類型。
在使用這兩個(gè)節(jié)點(diǎn)之前,最好先檢測(cè)一下節(jié)點(diǎn)類型。
如果節(jié)點(diǎn)是一個(gè)元素,nodeName中保存的始終是元素的標(biāo)簽名,而nodeValue值始終為0。
節(jié)點(diǎn)關(guān)系每個(gè)節(jié)點(diǎn)都有一個(gè)childNodes屬性,其中保存著一個(gè)NodeList對(duì)象。NodeList對(duì)象是一種類數(shù)組對(duì)象,用于保存一組有序的節(jié)點(diǎn),可以通過(guò)位置來(lái)訪問(wèn)這些節(jié)點(diǎn)。
hasChildNodes():這個(gè)方法在節(jié)點(diǎn)包含一個(gè)或多個(gè)子節(jié)點(diǎn)的情況下返回true。
ownerDocument:該屬性指向表示整個(gè)文檔的文檔節(jié)點(diǎn)。
// 將NodeList對(duì)象轉(zhuǎn)換為數(shù)組 var arrayOfNodes = Array.prototype.slice.call(someNode.childNodes,0);
兼容性:IE8以及更早版本將NodeList實(shí)現(xiàn)為一個(gè)COM對(duì)象,因此上面的代碼會(huì)導(dǎo)致錯(cuò)誤。
Note:NdoeList對(duì)象的特殊之處在于,它實(shí)際上是基于DOM結(jié)構(gòu)動(dòng)態(tài)執(zhí)行查詢的結(jié)果,因此DOM的變化能直接反映在NodeList對(duì)象之中。它是有生命的對(duì)象,而不是在我們第一次訪問(wèn)它在某一個(gè)瞬間拍下的快照。
操作節(jié)點(diǎn)appendChild():用于向childNodes列表的末尾添加一個(gè)節(jié)點(diǎn)。返回新增的節(jié)點(diǎn)。
insertBefore():接收兩個(gè)參數(shù):要插入的節(jié)點(diǎn)和作為參照的節(jié)點(diǎn)。插入節(jié)點(diǎn)后,被插入的節(jié)點(diǎn)會(huì)變成參照節(jié)點(diǎn)的前一個(gè)同胞節(jié)點(diǎn)。同時(shí)被方法返回。
replaceChild():接收兩個(gè)參數(shù):要插入的節(jié)點(diǎn)和要替換的節(jié)點(diǎn)。要替換的節(jié)點(diǎn)將由這個(gè)方法返回并從文檔樹中移除。同時(shí)由要插入的節(jié)點(diǎn)占據(jù)其位置。
removeChild():接收一個(gè)參數(shù),即要移除的節(jié)點(diǎn)。返回被移除的節(jié)點(diǎn)。
這四個(gè)方法都是操作的某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),也就是說(shuō),要使用這幾個(gè)方法必須先取得父節(jié)點(diǎn)。另外并不是所有節(jié)點(diǎn)都有子節(jié)點(diǎn),如果在不支持子節(jié)點(diǎn)的節(jié)點(diǎn)上,調(diào)用了這些方法,將會(huì)導(dǎo)致錯(cuò)誤。
Note:
如果傳入到appendChild()中的節(jié)點(diǎn)已經(jīng)是文檔的一部分,那結(jié)果就是將該節(jié)點(diǎn)從原來(lái)的位置轉(zhuǎn)移到新位置。即可以將DOM樹看成是由一系列指針連接起來(lái)的,但任何DOM節(jié)點(diǎn)也不能同時(shí)出現(xiàn)在文檔中的多個(gè)位置上。
在使用replaceChild()插入一個(gè)節(jié)點(diǎn)時(shí),該節(jié)點(diǎn)的關(guān)系指針都會(huì)從被它替換的節(jié)點(diǎn)復(fù)制過(guò)來(lái)。從技術(shù)上來(lái)講,被替換的節(jié)點(diǎn)仍然還在文檔中,但它在文檔中已經(jīng)沒(méi)有了自己的位置。同樣的,removeChild()移除的節(jié)點(diǎn)也同樣為文檔所有,只不過(guò)在文檔中已經(jīng)沒(méi)有了自己的位置。
其他方法有兩個(gè)方法是所有類型節(jié)點(diǎn)都要的。
cloneNode():用于創(chuàng)建調(diào)用這個(gè)方法的節(jié)點(diǎn)的一個(gè)完全相同的副本。接收一個(gè)布爾值參數(shù),true:表示執(zhí)行深復(fù)制,也就是復(fù)制節(jié)點(diǎn)以及整個(gè)子節(jié)點(diǎn)樹。false:表示執(zhí)行淺復(fù)制,即只復(fù)制節(jié)點(diǎn)本身。
Note:
deepList.childNodes.length中的差異主要是因?yàn)镮E8以及更早版本與其他瀏覽器處理空白字符的方式不一樣。IE9以及之前版本不會(huì)為空白符創(chuàng)建節(jié)點(diǎn)。
cloneNode()方法不會(huì)復(fù)制添加到DOM節(jié)點(diǎn)中的Javascript屬性,例如事件處理程序等。這個(gè)方法只復(fù)制特性,在明確指定的情況下也復(fù)制子節(jié)點(diǎn),其他一切都不會(huì)復(fù)制。IE在此存在一個(gè)bug,即它會(huì)復(fù)制事件處理程序,所以建議,在復(fù)制之前最好先移除事件處理程序。
normalize():處理文檔樹種的文本節(jié)點(diǎn)。
Document類型--nodeType=9Javascript通過(guò)Document類型表示文檔。HTMLDocument繼承自Document類型
1.document對(duì)象是HTMLDocument對(duì)象的實(shí)例
2.document對(duì)象是window對(duì)象的一個(gè)屬性,可以將其作為全局對(duì)象進(jìn)行訪問(wèn)。
document instanceof HTMLDocument //true HTMLDocument.__proto__ ==== Document //true
document作為我們操作文檔的一個(gè)公共接口存在。
document信息document.URL:包含頁(yè)面完整的URL
document.domain:包含頁(yè)面的域名
document.referrer:保存著鏈接到當(dāng)前頁(yè)面的那個(gè)頁(yè)面的URL
在這三個(gè)屬性中只有domain是可以設(shè)置的。但由于安全方面的限制,也并非可以給domain設(shè)置任何值。
不能將這個(gè)屬性設(shè)置為URL中不包含的域
如果域名一開始是松散的,那么不能將它設(shè)置為緊繃的。
// 假設(shè)頁(yè)面來(lái)自p2p.wrox.com域 document.domain = "wrox.com"; // 松散的,成功 document.domain = "nczonline.ne4t" // 出錯(cuò) document.domain = "p2p.wrox.com" // 緊繃的,出錯(cuò)
document.readyState:有兩個(gè)可能的值(HTML5新增)
loading:正在加載文檔
complete:已經(jīng)加載完文檔
document.compatMode:這個(gè)屬性的作用是告訴開發(fā)人員瀏覽器采用了那些渲染模式(HTML5新增)
值等于"CSS1Compat",表明瀏覽器采用標(biāo)準(zhǔn)模式進(jìn)行渲染
值等于"BackCompat",表明瀏覽器在混雜模式下進(jìn)行渲染
document子節(jié)點(diǎn)document.documentElement:獲得html元素的引用
document.body:獲得body元素的引用
document.head:獲得head元素的引用(HTML5新增)
document.title:包含title元素的中的文本
document.activeElement:這個(gè)屬性始終會(huì)引用DOM中當(dāng)前獲得了焦點(diǎn)的元素(HTML5新增)
Browser compatibility-head
Browser compatibility-activeElement
Document類型為查元素提供了兩種方法,1,2
HTMLDocument類型提供了方法,3
document.getElementById()
document.getElementsByName:這個(gè)方法會(huì)返回帶有給定name特性的元素,最常用于取得單選按鈕。同樣也返回 HTMLCollection對(duì)象。
HTMLCollection對(duì)象,可以通過(guò)length屬性訪問(wèn)元素長(zhǎng)度,通過(guò)[]方括號(hào)語(yǔ)法訪問(wèn)對(duì)象中的項(xiàng)。方括號(hào)中既可以是數(shù)字也可以是字符串的索引值。
創(chuàng)建節(jié)點(diǎn)document.createElement():接收一個(gè)參數(shù),即要?jiǎng)?chuàng)建元素的標(biāo)簽名。
document.createTextNode():接收一個(gè)參數(shù),要插入節(jié)點(diǎn)中的文本。
這些集合都是HTMLCollection對(duì)象
document.anchors:包含文檔中帶name特性的>元素
document.forms:包含文檔中所有的
document.images:包含文檔中所有的元素
document.links:包含文檔中所有帶href特性的a元素
Element類型--nodeType=1Element類型用于表現(xiàn)HTML或XML元素。HTMLElement類型繼承自Element類型。并添加了一些屬性。
HTMLElement.__proto__ === Element// true
屬性添加的屬性:可讀也可寫
id
title
lang(很少使用)
dir(很少使用)
className:與元素的class特性對(duì)應(yīng)。
dataset:HTML5規(guī)定可以為元素添加非標(biāo)準(zhǔn)的屬性,但要添加前綴data-,目的是為元素提供與渲染無(wú)關(guān)的信息,或者提供語(yǔ)義信息。這些屬性可以任意添加,隨機(jī)命名,只要以data-開頭即可??梢酝ㄟ^(guò)元素的dataset屬性來(lái)訪問(wèn)自定義屬性
var div = document.getElementById("bd"); console.log(div.id); console.log(div.className); console.log(div.title); console.log(div.lang); console.log(div.dir);
getAttribute():一般只有在取自定義特性情況下,才會(huì)使用此方法
setAttribute():接收兩個(gè)參數(shù),要設(shè)置特性的特性名和值
removeAttribute():用于徹底刪除元素的特性
DOM methods dealing with element"s attributes:
attributes屬性中包含一個(gè)NamedNodeMap,與NodeList類似。
通常用于遍歷元素的特性。
function outputAttributes ( ele ) { var pairs = [], attrName, attrValue, i, len; for(i = 0; i < ele.attributes.length; i++) { attrName = ele.attributes[i].nodeName; attrValue = ele.attributes[i].nodeValue; pairs.push(attrName + "=" + attrValue + """) } pairs.join(""); }操作類名
操作類名時(shí),需要通過(guò)className屬性添加、刪除、和替換類名。因?yàn)?b>className是一個(gè)字符串,所以即使只修改字符串一部分,也必須每次都設(shè)置整個(gè)字符串的值。
// 刪除"user"類 // 首先取得類名字字符并拆分成數(shù)組 var div = document.getElementsByTagName("div")[0]; var className = div.className.split(/s+/); // 找到要?jiǎng)h的類名 var pos = -1, i, len for(i = 0,len = className.length;i < len;i++) { if(className[i] === "user") { pos = i; break; } } className.splice(i,1); // 把剩下的類名拼成字符串并重新設(shè)置 div.className = className.join(" ");
為了從div中刪除class屬性中的"user",以上這些代碼都是必須的。很多javascript都實(shí)現(xiàn)了這個(gè)方法,以簡(jiǎn)化這些操作
HTML5新增了一個(gè)操作類名的方式,可以讓操作更簡(jiǎn)單也更安全。那就是為所有元素添加classList這個(gè)屬性。這個(gè)classList屬性是新集合類型DOMTokenList的實(shí)例。這個(gè)屬性是只讀的,有一個(gè)表示自己包含多少元素的length屬性,而要取得每個(gè)元素可以使用item()方法,也可以使用方括號(hào)語(yǔ)法。如果你想修改classList屬性,那么可以通過(guò)它定義的以下幾個(gè)方法進(jìn)行修改。
add(value):將給定的字符串值添加到列表中。如果值已經(jīng)存在,就不添加了
remove(value):從列表中刪除給定的字符串
contain(value):表示列表中是否存在給定的值,如果存在則返回true,不存在返回false
toggle(value):如果列表中已經(jīng)存在給定的值,刪除它;如果列表中沒(méi)有給定的值,添加它
Browser Compatibility
插入標(biāo)記(HTML5新增)insertAdjacentHTML():接收兩個(gè)參數(shù),插入位置和要插入的HTML文本
第一個(gè)參數(shù)必須是下列值之一:
beforebegin:在當(dāng)前元素之前插入一個(gè)緊鄰的同輩元素
afterbegin:在當(dāng)前元素之下插入一個(gè)新的子元素或在第一個(gè)子元素之前再插入新的子元素
beforeend:在當(dāng)前元素之下插入一個(gè)新的的子元素或在最后一個(gè)子元素之后插入新的子元素
afterend:在當(dāng)前元素之后插入一個(gè)緊鄰的同輩元素
瀏覽器兼容性
Text類型--nodeType=3包含的是可以照字面意思接收的純文本內(nèi)容。
合并文本節(jié)點(diǎn)HELLO WORLD!
DOM文檔中存在相鄰的同胞文本節(jié)點(diǎn)很容易導(dǎo)致混亂,因?yàn)榉植磺迥膫€(gè)文本節(jié)點(diǎn)表示哪個(gè)字符串。
瀏覽器在解析文檔時(shí),永遠(yuǎn)不會(huì)創(chuàng)建相鄰的文本節(jié)點(diǎn)。
出現(xiàn)相鄰的文本節(jié)點(diǎn)只會(huì)作為執(zhí)行DOM操作的結(jié)果出現(xiàn)
如果在一個(gè)包含兩個(gè)或多個(gè)文本節(jié)點(diǎn)的父元素上調(diào)用,Node類型的normalize()方法,則會(huì)將所有文本節(jié)點(diǎn)合并成一個(gè)節(jié)點(diǎn)。
var ele = document.createElement("div"); var text1 = document.createTextNode("Hello World!"); var text2 = document.createTextNode("Hi"); ele.appendChild(text1); ele.appendChild(text2); document.body.appendChild(ele) console.log(ele.childNodes.length);// 2 ele.normalize(); console.log(ele.childNodes.length);// 1分割文本節(jié)點(diǎn)
splitText():這個(gè)方法會(huì)將一個(gè)文本節(jié)點(diǎn)分成兩個(gè)文本節(jié)點(diǎn),即按照指定的位置分割nodeValue值。
var ele = document.createElement("div"); var text = document.createTextNode("Hello World!"); ele.appendChild(text); document.body.appendChild(ele) var newNode = ele.firstChild.splitText(5); console.log(newNode.nodeValue);// " World"操作表格
// 創(chuàng)建table var table = document.createElement("table"); table.border = 1; table.width = "100%"; // 創(chuàng)建tbody var tbody = document.createElement("tbody"); table.appendChild(tbody); // 創(chuàng)建第一行 tbody.insertRow(0); tbody.rows[0].insertCell(0); tbody.rows[0].cells[0].appendChild(document.createTextNode("Cell 1.1")); tbody.rows[0].insertCell(1); tbody.rows[0].cells[1].appendChild(document.createTextNode("Cell 2.1")); // 創(chuàng)建第二行 tbody.insertRow(1); tbody.rows[1].insertCell(0); tbody.rows[1].cells[0].appendChild(document.createTextNode("Cell 1.2")); tbody.rows[1].insertCell(1); tbody.rows[1].cells[1].appendChild(document.createTextNode("Cell 2.1")); // 添加到文檔中 document.body.appendChild(table);選擇符API
可以通過(guò)Document類型和Element類型的實(shí)例調(diào)用他們。
1.querySelector()
2.querySelectorAll()
Browser Compatibility-querSelector
Browser Compatibility-querSelectorAll
Note:
不像如getElementsByTagName這樣的API, 通過(guò)以上兩個(gè)API返回的對(duì)象不是live的。也就是說(shuō)當(dāng)文檔改變的時(shí)候,他們不會(huì)改變。
具體來(lái)說(shuō),返回的值實(shí)際上是帶有所有屬性和方法的NodeList,而其底層實(shí)現(xiàn)則類似于一組元素的快照,而非不斷對(duì)文檔進(jìn)行搜索的 動(dòng)態(tài)查詢。這樣實(shí)現(xiàn)可以避免使用NodeList對(duì)象通常會(huì)引起的大多數(shù)性能問(wèn)題
3.document.getElementsByTagName():返回包含0或多個(gè)元素的NodeList。在HTML文檔中,這個(gè)方法會(huì)返回一個(gè) HTMLCollection對(duì)象,作為一個(gè)動(dòng)態(tài)集合,該對(duì)象與NodeList非常相似。
4.getElementsByClassName():返回HTMLCollection對(duì)象,所以使用這個(gè)方法與使用getElementsByTagName()以及其他返回NodeList的DOM方法具有同樣的性能問(wèn)題
Browser Compatibility
關(guān)于NodeListNodeList及其近親NameNodeMap和HTMLCollection這個(gè)三個(gè)集合都是動(dòng)態(tài)的。也就是說(shuō)每當(dāng)文檔結(jié)構(gòu)發(fā)生變化,他們都會(huì)得到更新。性能影響
本質(zhì)上:NodeList對(duì)象是在訪問(wèn)DOM文檔時(shí)實(shí)時(shí)運(yùn)行的查詢。
DOM操作往往是Javascript程序中開銷最大的部分,而因訪問(wèn)NodeList導(dǎo)致的問(wèn)題最大。一般來(lái)說(shuō),盡量減少訪問(wèn)NodeList的次數(shù)。因?yàn)槊看卧L問(wèn)NodeList,都會(huì)運(yùn)行一次基于文檔的查詢。所以,可以考慮將從NodeList取得的值緩存起來(lái)?;蛘弑M量減少DOM操作
DOM2級(jí)遍歷和范圍 元素遍歷對(duì)于元素間的空格,IE9以及之前不會(huì)返回文本節(jié)點(diǎn),而其他所有瀏覽器都會(huì)返回文本節(jié)點(diǎn)。這樣就導(dǎo)致了在使用childNodes和firstChild等屬性時(shí)的行為不一致。為了彌補(bǔ)這一差異。
Element Tranversal API為DOM元素添加了以下5個(gè)屬性
childElementCount:返回子元素(不包括文本節(jié)點(diǎn)和注釋)的個(gè)數(shù)
firstElementChild:指向第一個(gè)子元素;firstChild的元素版
lastElementChild:指向最后一個(gè)子元素;lastChild的元素版
previousElementSibling:指向前一個(gè)同輩元素;previousSibling的元素版
nexrtElementSibling:指向后一個(gè)同輩元素;nextSibling的元素版
Browser Compatibility
DOM2級(jí)樣式 訪問(wèn)元素的樣式 style對(duì)象這個(gè)style對(duì)象是CSSStyleDeclaration的實(shí)例,包含著通過(guò)HTML的style特性指定的所有樣式信息,但不包含與外部樣式表經(jīng)層疊而來(lái)的樣式。
cssText
length
item(index)
getPropertyValue(propertyName)
removeProperty(propertyName)
setProperty(propertyName, value, priority)
getPropertyCSSValue(propertyName)
getPropertyPriority
parentRule
NOTE:
"DOM2級(jí)樣式"規(guī)范規(guī)定樣式對(duì)象上的相應(yīng)屬性名應(yīng)該是cssFloat。而IE則支持的是styleFloat。
對(duì)于使用短劃線(例如background-image)的CSS屬性名,必須將其轉(zhuǎn)換成駝峰大小寫形式,才能通過(guò)Javascript來(lái)訪問(wèn)。
計(jì)算樣式getComputeStyle():
接收兩個(gè)參數(shù),第一個(gè)參數(shù)為,要取得計(jì)算樣式的元素和一個(gè)偽元素字符串。
返回一個(gè)CSSStyleDeclaration對(duì)象,其中包含當(dāng)前元素的所有計(jì)算的樣式。
// IE var myDiv = document.getElementById("myDiv"); var computeStyle = myDiv.style.currentStyle // 其他瀏覽器 var computeStyle = document.defaultView.getComputedStyle(myDiv, null)
NOTE:無(wú)論在哪個(gè)瀏覽器,所有計(jì)算的樣式都是只讀的。
操作樣式表CSSStyleSheet類型表示的是樣式表,包括通過(guò)元素的樣表和在元素中定義的樣式表。
CSSStyleSheet繼承自StyleSheet
// 取得CSSStyleSheet對(duì)象的兩種方式 // 第一種 var sheet = null; for( var i = 0, len = document.styleSheets.length; i < len; i++ ) { sheet = document.styleSheets[i]; alert( sheet.href ); } // 第二種 function getStyleSheet ( element ) { return element.sheet || element.styleSheet;// IE8及以下瀏覽器支持styleSheet屬性 } var link = document.getElementsByTagName("link")[0]; var sheet = getStyleSheet(link);
NOTE:CSSStyleSheet對(duì)象是一套只讀的接口。除了disabled屬性。
繼承屬性
disabled
href
media
owerNode
type
非繼承屬性
cssRules:IE不支持,但有一個(gè)rules屬性
ownerRules:IE不支持
deleteRule(index):IE不支持,但有一個(gè)removeRule()方法
insertRule(rule,index):IE不支持,但有一個(gè)addRule()方法
CSSRule表示樣式表中的每一條規(guī)則。
cssText
seletorText
style
div.box { background-color : blue; width : 100px; height : 200px; } var sheet = document.styleSheets[0]; var rules = sheet.cssRules || sheet.rules; var rule = rules[0]; console.log(rule.seletorText);// "div.box" console.log(rule.style.cssText);// 完整的CSS代碼 console.log(rule.style.backgroundColor);//"blue" console.log(rule.style.width);//"100px" console.log(rule.style.height);//"200px"元素大小
下面介紹的內(nèi)容并不屬性"DOM2級(jí)"樣式規(guī)范,但卻與HTML的樣式息息相關(guān)。getBoundingClientRect()
表示元素在頁(yè)面中相對(duì)于是視口的位置偏移量
返回一個(gè)矩形對(duì)象,包含四個(gè)屬性:left,top,right,bottom。
offsetWidth
offsetHeight
offsetLeft
offsetTop
NOTE:所有這些屬性都是只讀的。并且每次訪問(wèn)它們都需要重新計(jì)算。因此,應(yīng)該盡量避免重復(fù)訪問(wèn)這些屬性。如果需要訪問(wèn),則可將其保存在變量中,提高性能
客戶區(qū)大小clientWith:元素內(nèi)容區(qū)寬度加上左右內(nèi)邊距寬度
clientHeight:元素內(nèi)容高度加上上下內(nèi)邊距高度
NOTE:所有這些屬性都是只讀的。并且每次訪問(wèn)它們都需要重新計(jì)算。
滾動(dòng)大小對(duì)于不含滾動(dòng)條的頁(yè)面,這些scrollHeight與scrollWidth與clientWith和clientHeight關(guān)系不是很清晰。
// 兼容性寫法 var docHeight = Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight); var docWidth = Math.max(document.documentElement.scrollWidth,document.documentElement.clienHeight)
scrollHeight:在沒(méi)有滾動(dòng)條的情況下,元素內(nèi)容的總高度
scrollWidth:在沒(méi)有滾動(dòng)條的情況下,元素內(nèi)容的總高度
scrollLeft
scrollTop
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78774.html
摘要:是文檔的一種表示結(jié)構(gòu)。這些任務(wù)大部分都是基于它。這個(gè)實(shí)踐的重點(diǎn)是把你在前端練級(jí)攻略第部分中學(xué)到的一些東西和結(jié)合起來(lái)。一旦你進(jìn)入框架部分,你將更好地理解并使用它們。到目前為止,你一直在使用進(jìn)行操作。它是在前端系統(tǒng)像今天這樣復(fù)雜之前編寫的。 本文是 前端練級(jí)攻略 第二部分,第一部分請(qǐng)看下面: 前端練級(jí)攻略(第一部分) 在第二部分,我們將重點(diǎn)學(xué)習(xí) JavaScript 作為一種獨(dú)立的語(yǔ)言,如...
摘要:定義一個(gè)組件可以在其他組件中調(diào)用這個(gè)組件調(diào)用組件劉宇組件插入內(nèi)容在上面的案例中可以看到吧寫到當(dāng)中,這種寫法稱為。 React初識(shí) React是Facebook推出的一個(gè)javascript庫(kù)(用來(lái)創(chuàng)建用戶界面的Javascript庫(kù)),所以他只是和用戶的界面打交道,你可以把它看成MVC中的V(視圖)這一層。 組件 React的一切都是基于組件的。web世界的構(gòu)成是基于各種HTML標(biāo)簽的...
摘要:一般來(lái)說(shuō),聲明式編程關(guān)注于發(fā)生了啥,而命令式則同時(shí)關(guān)注與咋發(fā)生的。聲明式編程可以較好地解決這個(gè)問(wèn)題,剛才提到的比較麻煩的元素選擇這個(gè)動(dòng)作可以交托給框架或者庫(kù)區(qū)處理,這樣就能讓開發(fā)者專注于發(fā)生了啥,這里推薦一波與。 本文翻譯自FreeCodeCamp的from-zero-to-front-end-hero-part。 繼續(xù)譯者的廢話,這篇文章是前端攻略-從路人甲到英雄無(wú)敵的下半部分,在...
摘要:有級(jí)級(jí)級(jí)共個(gè)級(jí)別。事件類型事件類型鼠標(biāo)事件鍵盤事件事件事件處理器執(zhí)行代碼的程序在事件發(fā)生時(shí)會(huì)對(duì)事件做出響應(yīng)。在標(biāo)簽中使用事件處理器的語(yǔ)法是標(biāo)簽事件處理器代碼事件處理程序事件就是用戶或?yàn)g覽器自身執(zhí)行的某種動(dòng)作。 DOM介紹 D(文檔)可以理解為整個(gè)Web加載的網(wǎng)頁(yè)文檔,O(對(duì)象)可以理解為類似window對(duì)象只來(lái)的東西,可以調(diào)用屬性和方法,這里我們說(shuō)的是document對(duì)象,M(模型)可...
摘要:事件處理允許對(duì)事件做出反應(yīng)。還可以用代碼為多個(gè)元素分配相同的事件。指定事件監(jiān)聽(tīng)器接下來(lái)看看怎樣為元素分配事件監(jiān)聽(tīng)器。 翻譯:瘋狂惡的技術(shù)宅https://medium.freecodecamp.o... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 Javascript DOM(文檔對(duì)象模型)是一個(gè)允許開發(fā)人員操縱頁(yè)面內(nèi)容、結(jié)構(gòu)和風(fēng)...
閱讀 2960·2023-04-26 01:47
閱讀 3710·2023-04-25 23:45
閱讀 2596·2021-10-13 09:39
閱讀 680·2021-10-09 09:44
閱讀 1978·2021-09-22 15:59
閱讀 2948·2021-09-13 10:33
閱讀 1889·2021-09-03 10:30
閱讀 723·2019-08-30 15:53