摘要:在瀏覽器中,對象是繼承自類型的一個實例,表示整個頁面。級只為規定了一個方法,即。,元素在文檔中的唯一標識符。,有關元素的附加說明信息,一般通過工具提示條顯示出來。第一類特性就是,用于通過為元素指定樣式。
DOM(文檔對象模型)是針對HTML 和XML 文檔的一個API(應用程序編程接口)。DOM描,繪了一個層次化的節點樹,允許開發人員添加、移除和修改頁面的某一部分
節點層次DOM 可以將任何HTML 或XML 文檔描繪成一個由多層節點構成的結構。節點分為幾種不同的類
型,每種類型分別表示文檔中不同的信息及(或)標記。每個節點都擁有各自的特點、數據和方法,另
外也與其他節點存在某種關系
獲取子節點
var firstChild = someNode.childNodes[0]; var secondChild = someNode.childNodes.item(1); var count = someNode.childNodes.length;parentNode
獲取父節點
firstNode獲取第一個子節點
lastNode獲取最后一個子節點
nextSibling獲取下一個兄弟節點
previousSibling獲取上一個兄弟節點
ownerDocument獲取文檔節點
hasChildNodes()判斷是否有子節點
appendChild()添加子節點,接收一個參數表示要添加的節點,返回添加的節點.
var returnedNode = someNode.appendChild(newNode); alert(returnedNode == newNode); //true alert(someNode.lastChild == newNode); //trueinsertBefore()
在參考節點前添加子節點,接收兩個參數,第一個參數表示要添加的節點,第二個參數表示參考節點,返回添加的節點.
//插入后成為第一個子節點 var returnedNode = someNode.insertBefore(newNode, someNode.firstChild); alert(returnedNode == newNode); //truereplaceChild()
替換子節點,接收兩個參數,第一個參數表示要添加的節點,第二個參數表示被替換的節點,返回被替換的節點.
//替換第一個子節點 var returnedNode = someNode.replaceChild(newNode, someNode.firstChild);removeChild()
移除子節點,這個方法接受一個參數,即要移除的節點。被移除的節點將成為方法的返回值
//移除第一個子節點 var formerFirstChild = someNode.removeChild(someNode.firstChild);cloneNode()
克隆節點,接收一個boolean類型的參數,當參數為true時執行深復制,意即復制內容包含其子節點.
var deepList = myList.cloneNode(true); alert(deepList.childNodes.length); //3(IE < 9)或7(其他瀏覽器) var shallowList = myList.cloneNode(false); alert(shallowList.childNodes.length); //0
deepList.childNodes.length 中的差異主要是因為IE8 及更早版本與其他瀏覽器處理空白字符的方式不一樣。IE9 之前的版本不會為空白符創建節點。
cloneNode()方法不會復制添加到DOM 節點中的JavaScript 屬性,例如事件處
理程序等。這個方法只復制特性、(在明確指定的情況下也復制)子節點,其他一切
都不會復制。IE 在此存在一個bug,即它會復制事件處理程序,所以我們建議在復制
之前最好先移除事件處理程序。
JavaScript 通過Document 類型表示文檔。在瀏覽器中,document 對象是HTMLDocument(繼承
自Document 類型)的一個實例,表示整個HTML 頁面。而且,document 對象是window 對象的一個
屬性,因此可以將其作為全局對象來訪問
獲取html節點元素
var html = document.documentElement; //取得對的引用 alert(html === document.childNodes[0]); //true alert(html === document.firstChild); //truebody
獲取body節點元素
title獲取title文字節點元素
//取得文檔標題 var originalTitle = document.title; //設置文檔標題 document.title = "New page title";URL
取得完整的URL
domain取得域名
referrer取得來源頁面的URL
//取得完整的URL var url = document.URL; //取得域名 var domain = document.domain; //取得來源頁面的URL var referrer = document.referrer;getElementById()
通過id屬性獲取元素
getElementsByTagName()通過元素名獲取元素
var div = document.getElementById("myDiv"); //取得id="myDiv"元素的引用 var images = document.getElementsByTagName("img"); //取得img元素的引用 var allElements = document.getElementsByTagName("*"); //獲取文檔中所有的元素
document.anchorsIE7及較低版本還為此方法添加了一個有意思的“怪癖”:name特性與給定ID匹配的表單元素也會被該方法返回
包含文檔中所有帶name 特性的元素
document.forms包含文檔中所有的
包含文檔中所有的元素,與document.getElementsByTagName("img")得到的結果相同;
document.links包含文檔中所有帶href 特性的元素。
DOM一致性檢測由于 DOM 分為多個級別,也包含多個部分,因此檢測瀏覽器實現了DOM的哪些部分就十分必要
了。document.implementation 屬性就是為此提供相應信息和功能的對象,與瀏覽器對DOM的實現
直接對應。DOM1 級只為document.implementation 規定了一個方法,即hasFeature()。這個方
法接受兩個參數:要檢測的DOM功能的名稱及版本號。如果瀏覽器支持給定名稱和版本的功能,則該
方法返回true
var hasXmlDom = document.implementation.hasFeature("XML", "1.0");
以下為列出了可以檢測的不同的值及版本號
Core 1.0、2.0、3.0 基本的DOM,用于描述表現文檔的節點樹
XML 1.0、2.0、3.0 Core的XML擴展,添加了對CDATA、處理指令及實體的支持
HTML 1.0、2.0 XML的HTML擴展,添加了對HTML特有元素及實體的支持
Views 2.0 基于某些樣式完成文檔的格式化
StyleSheets 2.0 將樣式表關聯到文檔
CSS 2.0 對層疊樣式表1級的支持
CSS2 2.0 對層疊樣式表2級的支持
Events 2.0,3.0 常規的DOM事件
UIEvents 2.0,3.0 用戶界面事件
MouseEvents 2.0,3.0 由鼠標引發的事件(click、mouseover等)
MutationEvents 2.0,3.0 DOM樹變化時引發的事件
HTMLEvents 2.0 HTML4.01事件
Range 2.0 用于操作DOM樹中某個范圍的對象和方法
Traversal 2.0 遍歷DOM樹的方法
LS 3.0 文件與DOM樹之間的同步加載和保存
LS-Async 3.0 文件與DOM樹之間的異步加載和保存
Validation 3.0 在確保有效的前提下修改DOM樹的方法
Element類型 HTML元素所有 HTML 元素都由HTMLElement 類型表示,不是直接通過這個類型,也是通過它的子類型來表
示。HTMLElement 類型直接繼承自Element 并添加了一些屬性。添加的這些屬性分別對應于每個HTML
元素中都存在的下列標準特性。
id,元素在文檔中的唯一標識符。
title,有關元素的附加說明信息,一般通過工具提示條顯示出來。
lang,元素內容的語言代碼,很少使用。
dir,語言的方向,值為"ltr"(left-to-right,從左至右)或"rtl"(right-to-left,從右至左),也很少使用。
className,與元素的class 特性對應,即為元素指定的CSS類。沒有將這個屬性命名為class,是因為class 是ECMAScript 的保留字
var div = document.getElementById("myDiv"); alert(div.id); //"myDiv"" alert(div.className); //"bd" alert(div.title); //"Body text" alert(div.lang); //"en" alert(div.dir); //"ltr" div.id = "someOtherId"; div.className = "ft"; div.title = "Some other text"; div.lang = "fr"; div.dir ="rtl";特性操作
有三個方法可以操作元素的特性,getAttribute() setAttribute() removeAttribute()
var div = document.getElementById("myDiv"); alert(div.getAttribute("id")); //"myDiv" alert(div.getAttribute("class")); //"bd" div.setAttribute("id", "someOtherId"); div.setAttribute("class", "ft"); div.setAttribute("title", "Some other text"); div.removeAttribute("class");
有兩類特殊的特性,它們雖然有對應的屬性名,但屬性的值與通過getAttribute()返回的值并不
相同。第一類特性就是style,用于通過CSS 為元素指定樣式。在通過getAttribute()訪問時,返
回的style 特性值中包含的是CSS 文本,而通過屬性來訪問它則會返回一個對象。
第二類與眾不同的特性是onclick 這樣的事件處理程序。當在元素上使用時,onclick 特性中包
含的是JavaScript 代碼,如果通過getAttribute()訪問,則會返回相應代碼的字符串.
IE6 及以前版本不支持removeAttribute()。
Element類型是使用attributes屬性的唯一一個DOM節點類型,attributes屬性是NamedNodeMap類型的對象,它有以下幾個方法
getNamedItem(name):返回nodeName 屬性等于name 的節點;
removeNamedItem(name):從列表中移除nodeName 屬性等于name 的節點;
setNamedItem(node):向列表中添加節點,以節點的nodeName 屬性為索引;
item(pos):返回位于數字pos 位置處的節點。
var id = element.attributes.getNamedItem("id").nodeValue; var id = element.attributes["id"].nodeValue; element.attributes["id"].nodeValue = "someOtherId";
由于attributes的方法不夠方便,因此開發人員更多的會使用getAttribute()、removeAttribute()和setAttribute()方法。
創建元素使用 document.createElement()方法可以創建新元素。這個方法只接受一個參數,即要創建元素的標簽名。
var div = document.createElement("div"); div.id = "myDiv"; div.className = "box"; document.appendChild(div);
在 IE 中可以以另一種方式使用createElement(),即為這個方法傳入完整的元素標簽,也可以包含屬性,如下面的例子所示。
var div = document.createElement("");
這種方式有助于避開在IE7 及更早版本中動態創建元素的某些問題。下面是已知的一些這類問題。
不能設置動態創建的元素的name 特性
不能通過表單的reset()方法重設動態創建的元素
動態創建的 type 特性值為"reset"的
動態創建的一批name 相同的單選按鈕彼此毫無關系。name 值相同的一組單選按鈕本來應該用于表示同一選項的不同值,但動態創建的一批這種單選按鈕之間卻沒有這種關系
上述所有問題都可以通過在 createElement()中指定完整的HTML標簽來解決,如下面的例子所示。
if (client.browser.ie && client.browser.ie <=7){ //創建一個帶name 特性的iframe 元素 var iframe = document.createElement(""); //創建input 元素 var input = document.createElement(""); //創建button 元素 var button = document.createElement(""); //創建單選按鈕 var radio1 = document.createElement(""); var radio2 = document.createElement(""); }Text類型
文本節點由 Text 類型表示,包含的是可以照字面解釋的純文本內容。純文本中可以包含轉義后的HTML 字符,但不能包含HTML代碼。
使用下列方法可以操作節點中的文本
appendData(text):將text 添加到節點的末尾。
deleteData(offset, count):從offset 指定的位置開始刪除count 個字符。
insertData(offset, text):在offset 指定的位置插入text。
replaceData(offset, count, text):用text 替換從offset 指定的位置開始到offset+count為止處的文本
splitText(offset):從offset 指定的位置將當前文本節點分成兩個文本節點
substringData(offset, count):提取從offset 指定的位置開始到offset+count 為止處的字符串
創建文本節點通過createTextNode()可以創建文本節點.
var textNode = document.createTextNode("Hello world!");
下面展示如何將一個文本節點添加到文檔中
var element = document.createElement("div"); element.className = "message"; var textNode = document.createTextNode("Hello world!"); element.appendChild(textNode); document.body.appendChild(element);合并文本節點
一個元素可能會存在多個文本節點,但是文本節點之間也沒有空格,因此無法區分哪個節點對應的是哪個文本,通過下面的方法可以將element元素的文本節點合并.
element.normalize();
當然也可以分割文本節點,使用splitText(index),index表示字符索引.
var newNode = element.firstChild.splitText(5);從位置5 開始。位置5是"Hello"和"world!"之間的空格 alert(element.firstChild.nodeValue); //"Hello" alert(newNode.nodeValue); //" world!" alert(element.childNodes.length); //2
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86136.html
摘要:為此也做了一些學習簡單的侃一侃虛擬到底是什么虛擬詳解二什么是虛擬虛擬首次產生是框架最先提出和使用的,其卓越的性能很快得到廣大開發者的認可,繼之后也在其核心引入了虛擬的概念。所謂的虛擬到底是什么也就是通過語言來描述一段代碼。 隨著Vue和React的風聲水起,伴隨著諸多框架的成長,虛擬DOM漸漸成了我們經常議論和討論的話題。什么是虛擬DOM,虛擬DOM是如何渲染的,那么Vue的虛擬Dom...
摘要:不同的框架對這三個屬性的命名會有點差別,但表達的意思是一致的。它們分別是標簽名屬性和子元素對象。我們先來看下頁面的更新一般會經過幾個階段。元素有可能是數組的形式,需要將數組解構一層。 歡迎關注我的公眾號睿Talk,獲取我最新的文章:showImg(https://segmentfault.com/img/bVbmYjo); 一、前言 目前最流行的兩大前端框架,React和Vue,都不約...
摘要:本文就將帶大家深入淺出地了解事件的那些屬性和方法。針對不同級別的,我們的事件處理方式也是不一樣的。當然其優點是不需要操作來完成事件的綁定。文章地址事件深入淺出二。 在項目開發時,我們時常需要考慮用戶在使用產品時產生的各種各樣的交互事件,比如鼠標點擊事件、敲擊鍵盤事件等。這樣的事件行為都是前端DOM事件的組成部分,不同的DOM事件會有不同的觸發條件和觸發效果。本文就將帶大家深入淺出地了解...
摘要:簡介原文鏈接簡稱是一種輕量級,解釋型的編程語言,其函數是一等公民。標準的目標是讓任何一種程序設計語言能操控使用任何一種標記語言編寫出的任何一份文檔。核心規定了如何映射基于的文檔結構,以便簡化對文檔的任意部分的訪問和操作。 JavaScript 簡介 原文鏈接 JavaScript ( 簡稱:JS ) 是一種 輕量級,解釋型 的編程語言,其函數是一等公民。眾所周知,它是用于網頁開發的腳...
閱讀 3288·2021-09-08 09:45
閱讀 1251·2019-08-30 15:53
閱讀 1522·2019-08-30 14:12
閱讀 981·2019-08-29 17:01
閱讀 2568·2019-08-29 15:35
閱讀 394·2019-08-29 13:09
閱讀 1965·2019-08-29 12:32
閱讀 3083·2019-08-26 18:37