亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

DOM(一)

imccl / 1285人閱讀

摘要:在瀏覽器中,對象是繼承自類型的一個實例,表示整個頁面。級只為規(guī)定了一個方法,即。,元素在文檔中的唯一標(biāo)識符。,有關(guān)元素的附加說明信息,一般通過工具提示條顯示出來。第一類特性就是,用于通過為元素指定樣式。

DOM(文檔對象模型)是針對HTML 和XML 文檔的一個API(應(yīng)用程序編程接口)。DOM描,繪了一個層次化的節(jié)點樹,允許開發(fā)人員添加、移除和修改頁面的某一部分

節(jié)點層次

DOM 可以將任何HTML 或XML 文檔描繪成一個由多層節(jié)點構(gòu)成的結(jié)構(gòu)。節(jié)點分為幾種不同的類
型,每種類型分別表示文檔中不同的信息及(或)標(biāo)記。每個節(jié)點都擁有各自的特點、數(shù)據(jù)和方法,另
外也與其他節(jié)點存在某種關(guān)系

節(jié)點的公共屬和方法 childNodes

獲取子節(jié)點

var firstChild = someNode.childNodes[0];
var secondChild = someNode.childNodes.item(1);
var count = someNode.childNodes.length;
parentNode

獲取父節(jié)點

firstNode

獲取第一個子節(jié)點

lastNode

獲取最后一個子節(jié)點

nextSibling

獲取下一個兄弟節(jié)點

previousSibling

獲取上一個兄弟節(jié)點

ownerDocument

獲取文檔節(jié)點

hasChildNodes()

判斷是否有子節(jié)點

appendChild()

添加子節(jié)點,接收一個參數(shù)表示要添加的節(jié)點,返回添加的節(jié)點.

var returnedNode = someNode.appendChild(newNode);
alert(returnedNode == newNode); //true
alert(someNode.lastChild == newNode); //true
insertBefore()

在參考節(jié)點前添加子節(jié)點,接收兩個參數(shù),第一個參數(shù)表示要添加的節(jié)點,第二個參數(shù)表示參考節(jié)點,返回添加的節(jié)點.

//插入后成為第一個子節(jié)點
var returnedNode = someNode.insertBefore(newNode, someNode.firstChild);
alert(returnedNode == newNode); //true
replaceChild()

替換子節(jié)點,接收兩個參數(shù),第一個參數(shù)表示要添加的節(jié)點,第二個參數(shù)表示被替換的節(jié)點,返回被替換的節(jié)點.

//替換第一個子節(jié)點
var returnedNode = someNode.replaceChild(newNode, someNode.firstChild);
removeChild()

移除子節(jié)點,這個方法接受一個參數(shù),即要移除的節(jié)點。被移除的節(jié)點將成為方法的返回值

//移除第一個子節(jié)點
var formerFirstChild = someNode.removeChild(someNode.firstChild);
cloneNode()

克隆節(jié)點,接收一個boolean類型的參數(shù),當(dāng)參數(shù)為true時執(zhí)行深復(fù)制,意即復(fù)制內(nèi)容包含其子節(jié)點.

  • item 1
  • item 2
  • item 3
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 之前的版本不會為空白符創(chuàng)建節(jié)點。
cloneNode()方法不會復(fù)制添加到DOM 節(jié)點中的JavaScript 屬性,例如事件處
理程序等。這個方法只復(fù)制特性、(在明確指定的情況下也復(fù)制)子節(jié)點,其他一切
都不會復(fù)制。IE 在此存在一個bug,即它會復(fù)制事件處理程序,所以我們建議在復(fù)制
之前最好先移除事件處理程序。

Doucment類型

JavaScript 通過Document 類型表示文檔。在瀏覽器中,document 對象是HTMLDocument(繼承
自Document 類型)的一個實例,表示整個HTML 頁面。而且,document 對象是window 對象的一個
屬性,因此可以將其作為全局對象來訪問

document對象的屬性和方法 documentElement

獲取html節(jié)點元素

var html = document.documentElement; //取得對的引用
alert(html === document.childNodes[0]); //true
alert(html === document.firstChild); //true
body

獲取body節(jié)點元素

title

獲取title文字節(jié)點元素

//取得文檔標(biāo)題
var originalTitle = document.title;
//設(shè)置文檔標(biāo)題
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("*"); //獲取文檔中所有的元素

IE7及較低版本還為此方法添加了一個有意思的“怪癖”:name特性與給定ID匹配的表單元素也會被該方法返回

document.anchors

包含文檔中所有帶name 特性的元素

document.forms

包含文檔中所有的

元素,與document.getElementsByTagName("form")得到的結(jié)果相同

document.images

包含文檔中所有的元素,與document.getElementsByTagName("img")得到的結(jié)果相同;

document.links

包含文檔中所有帶href 特性的元素。

DOM一致性檢測

由于 DOM 分為多個級別,也包含多個部分,因此檢測瀏覽器實現(xiàn)了DOM的哪些部分就十分必要
了。document.implementation 屬性就是為此提供相應(yīng)信息和功能的對象,與瀏覽器對DOM的實現(xiàn)
直接對應(yīng)。DOM1 級只為document.implementation 規(guī)定了一個方法,即hasFeature()。這個方
法接受兩個參數(shù):要檢測的DOM功能的名稱及版本號。如果瀏覽器支持給定名稱和版本的功能,則該
方法返回true

var hasXmlDom = document.implementation.hasFeature("XML", "1.0");

以下為列出了可以檢測的不同的值及版本號

Core 1.0、2.0、3.0 基本的DOM,用于描述表現(xiàn)文檔的節(jié)點樹

XML 1.0、2.0、3.0 Core的XML擴展,添加了對CDATA、處理指令及實體的支持

HTML 1.0、2.0 XML的HTML擴展,添加了對HTML特有元素及實體的支持

Views 2.0 基于某些樣式完成文檔的格式化

StyleSheets 2.0 將樣式表關(guān)聯(lián)到文檔

CSS 2.0 對層疊樣式表1級的支持

CSS2 2.0 對層疊樣式表2級的支持

Events 2.0,3.0 常規(guī)的DOM事件

UIEvents 2.0,3.0 用戶界面事件

MouseEvents 2.0,3.0 由鼠標(biāo)引發(fā)的事件(click、mouseover等)

MutationEvents 2.0,3.0 DOM樹變化時引發(fā)的事件

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 并添加了一些屬性。添加的這些屬性分別對應(yīng)于每個HTML
元素中都存在的下列標(biāo)準(zhǔn)特性。

id,元素在文檔中的唯一標(biāo)識符。

title,有關(guān)元素的附加說明信息,一般通過工具提示條顯示出來。

lang,元素內(nèi)容的語言代碼,很少使用。

dir,語言的方向,值為"ltr"(left-to-right,從左至右)或"rtl"(right-to-left,從右至左),也很少使用。

className,與元素的class 特性對應(yīng),即為元素指定的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");

有兩類特殊的特性,它們雖然有對應(yīng)的屬性名,但屬性的值與通過getAttribute()返回的值并不
相同。第一類特性就是style,用于通過CSS 為元素指定樣式。在通過getAttribute()訪問時,返
回的style 特性值中包含的是CSS 文本,而通過屬性來訪問它則會返回一個對象。
第二類與眾不同的特性是onclick 這樣的事件處理程序。當(dāng)在元素上使用時,onclick 特性中包
含的是JavaScript 代碼,如果通過getAttribute()訪問,則會返回相應(yīng)代碼的字符串.
IE6 及以前版本不支持removeAttribute()。

attributes 屬性

Element類型是使用attributes屬性的唯一一個DOM節(jié)點類型,attributes屬性是NamedNodeMap類型的對象,它有以下幾個方法

getNamedItem(name):返回nodeName 屬性等于name 的節(jié)點;

removeNamedItem(name):從列表中移除nodeName 屬性等于name 的節(jié)點;

setNamedItem(node):向列表中添加節(jié)點,以節(jié)點的nodeName 屬性為索引;

item(pos):返回位于數(shù)字pos 位置處的節(jié)點。

var id = element.attributes.getNamedItem("id").nodeValue;
var id = element.attributes["id"].nodeValue;
element.attributes["id"].nodeValue = "someOtherId";

由于attributes的方法不夠方便,因此開發(fā)人員更多的會使用getAttribute()、removeAttribute()setAttribute()方法。

創(chuàng)建元素

使用 document.createElement()方法可以創(chuàng)建新元素。這個方法只接受一個參數(shù),即要創(chuàng)建元素的標(biāo)簽名。

var div = document.createElement("div");
div.id = "myDiv";
div.className = "box";

document.appendChild(div);

在 IE 中可以以另一種方式使用createElement(),即為這個方法傳入完整的元素標(biāo)簽,也可以包含屬性,如下面的例子所示。

var div = document.createElement("
");

這種方式有助于避開在IE7 及更早版本中動態(tài)創(chuàng)建元素的某些問題。下面是已知的一些這類問題。

不能設(shè)置動態(tài)創(chuàng)建的"); //創(chuàng)建input 元素 var input = document.createElement(""); //創(chuàng)建button 元素 var button = document.createElement(""); //創(chuàng)建單選按鈕 var radio1 = document.createElement(""); var radio2 = document.createElement(""); } Text類型

文本節(jié)點由 Text 類型表示,包含的是可以照字面解釋的純文本內(nèi)容。純文本中可以包含轉(zhuǎn)義后的HTML 字符,但不能包含HTML代碼。

使用下列方法可以操作節(jié)點中的文本

appendData(text):將text 添加到節(jié)點的末尾。

deleteData(offset, count):從offset 指定的位置開始刪除count 個字符。

insertData(offset, text):在offset 指定的位置插入text。

replaceData(offset, count, text):用text 替換從offset 指定的位置開始到offset+count為止處的文本

splitText(offset):從offset 指定的位置將當(dāng)前文本節(jié)點分成兩個文本節(jié)點

substringData(offset, count):提取從offset 指定的位置開始到offset+count 為止處的字符串

創(chuàng)建文本節(jié)點

通過createTextNode()可以創(chuàng)建文本節(jié)點.

var textNode = document.createTextNode("Hello world!");

下面展示如何將一個文本節(jié)點添加到文檔中

var element = document.createElement("div");
element.className = "message";
var textNode = document.createTextNode("Hello world!");
element.appendChild(textNode);
document.body.appendChild(element);
合并文本節(jié)點

一個元素可能會存在多個文本節(jié)點,但是文本節(jié)點之間也沒有空格,因此無法區(qū)分哪個節(jié)點對應(yīng)的是哪個文本,通過下面的方法可以將element元素的文本節(jié)點合并.

element.normalize();

當(dāng)然也可以分割文本節(jié)點,使用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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/86136.html

相關(guān)文章

  • 虛擬Dom詳解 - ()

    摘要:為此也做了一些學(xué)習(xí)簡單的侃一侃虛擬到底是什么虛擬詳解二什么是虛擬虛擬首次產(chǎn)生是框架最先提出和使用的,其卓越的性能很快得到廣大開發(fā)者的認(rèn)可,繼之后也在其核心引入了虛擬的概念。所謂的虛擬到底是什么也就是通過語言來描述一段代碼。 隨著Vue和React的風(fēng)聲水起,伴隨著諸多框架的成長,虛擬DOM漸漸成了我們經(jīng)常議論和討論的話題。什么是虛擬DOM,虛擬DOM是如何渲染的,那么Vue的虛擬Dom...

    ashe 評論0 收藏0
  • 虛擬DOM

    摘要:什么是虛擬舉例說明如果網(wǎng)頁中有一個表格,表頭是姓名,年級,分?jǐn)?shù)。即我們用虛擬的結(jié)構(gòu)替換需要處理的結(jié)構(gòu),對虛擬的進(jìn)行操作之后再進(jìn)行渲染,就成為了真實的數(shù)據(jù)。當(dāng)狀態(tài)變更的時候用修改后的新渲染的的對象和舊的虛擬對象作對比,記錄著兩棵樹的差異。 虛擬DOM 可以看看這個文章如何理解虛擬DOM? - 戴嘉華的回答 - 知乎 https://www.zhihu.com/questio... 深度剖...

    yanwei 評論0 收藏0
  • 虛擬DOM

    摘要:什么是虛擬舉例說明如果網(wǎng)頁中有一個表格,表頭是姓名,年級,分?jǐn)?shù)。即我們用虛擬的結(jié)構(gòu)替換需要處理的結(jié)構(gòu),對虛擬的進(jìn)行操作之后再進(jìn)行渲染,就成為了真實的數(shù)據(jù)。當(dāng)狀態(tài)變更的時候用修改后的新渲染的的對象和舊的虛擬對象作對比,記錄著兩棵樹的差異。 虛擬DOM 可以看看這個文章如何理解虛擬DOM? - 戴嘉華的回答 - 知乎 https://www.zhihu.com/questio... 深度剖...

    alin 評論0 收藏0
  • 你不知道的Virtual DOM):Virtual Dom介紹

    摘要:不同的框架對這三個屬性的命名會有點差別,但表達(dá)的意思是一致的。它們分別是標(biāo)簽名屬性和子元素對象。我們先來看下頁面的更新一般會經(jīng)過幾個階段。元素有可能是數(shù)組的形式,需要將數(shù)組解構(gòu)一層。 歡迎關(guān)注我的公眾號睿Talk,獲取我最新的文章:showImg(https://segmentfault.com/img/bVbmYjo); 一、前言 目前最流行的兩大前端框架,React和Vue,都不約...

    lavor 評論0 收藏0
  • DOM 事件深入淺出(

    摘要:本文就將帶大家深入淺出地了解事件的那些屬性和方法。針對不同級別的,我們的事件處理方式也是不一樣的。當(dāng)然其優(yōu)點是不需要操作來完成事件的綁定。文章地址事件深入淺出二。 在項目開發(fā)時,我們時常需要考慮用戶在使用產(chǎn)品時產(chǎn)生的各種各樣的交互事件,比如鼠標(biāo)點擊事件、敲擊鍵盤事件等。這樣的事件行為都是前端DOM事件的組成部分,不同的DOM事件會有不同的觸發(fā)條件和觸發(fā)效果。本文就將帶大家深入淺出地了解...

    macg0406 評論0 收藏0
  • JavaScript 簡介

    摘要:簡介原文鏈接簡稱是一種輕量級,解釋型的編程語言,其函數(shù)是一等公民。標(biāo)準(zhǔn)的目標(biāo)是讓任何一種程序設(shè)計語言能操控使用任何一種標(biāo)記語言編寫出的任何一份文檔。核心規(guī)定了如何映射基于的文檔結(jié)構(gòu),以便簡化對文檔的任意部分的訪問和操作。 JavaScript 簡介 原文鏈接 JavaScript ( 簡稱:JS ) 是一種 輕量級,解釋型 的編程語言,其函數(shù)是一等公民。眾所周知,它是用于網(wǎng)頁開發(fā)的腳...

    URLOS 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<