成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

DOM(一)

imccl / 1255人閱讀

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

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

節(jié)點(diǎn)層次

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

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

獲取子節(jié)點(diǎn)

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

獲取父節(jié)點(diǎn)

firstNode

獲取第一個(gè)子節(jié)點(diǎn)

lastNode

獲取最后一個(gè)子節(jié)點(diǎn)

nextSibling

獲取下一個(gè)兄弟節(jié)點(diǎn)

previousSibling

獲取上一個(gè)兄弟節(jié)點(diǎn)

ownerDocument

獲取文檔節(jié)點(diǎn)

hasChildNodes()

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

appendChild()

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

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

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

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

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

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

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

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

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

  • 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 中的差異主要是因?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ù)制
之前最好先移除事件處理程序。

Doucment類型

JavaScript 通過(guò)Document 類型表示文檔。在瀏覽器中,document 對(duì)象是HTMLDocument(繼承
自Document 類型)的一個(gè)實(shí)例,表示整個(gè)HTML 頁(yè)面。而且,document 對(duì)象是window 對(duì)象的一個(gè)
屬性,因此可以將其作為全局對(duì)象來(lái)訪問(wèn)

document對(duì)象的屬性和方法 documentElement

獲取html節(jié)點(diǎn)元素

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

獲取body節(jié)點(diǎn)元素

title

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

//取得文檔標(biāo)題
var originalTitle = document.title;
//設(shè)置文檔標(biāo)題
document.title = "New page title";
URL

取得完整的URL

domain

取得域名

referrer

取得來(lái)源頁(yè)面的URL

//取得完整的URL
var url = document.URL;
//取得域名
var domain = document.domain;
//取得來(lái)源頁(yè)面的URL
var referrer = document.referrer;
getElementById()

通過(guò)id屬性獲取元素

getElementsByTagName()

通過(guò)元素名獲取元素

var div = document.getElementById("myDiv"); //取得id="myDiv"元素的引用
var images = document.getElementsByTagName("img"); //取得img元素的引用
var allElements = document.getElementsByTagName("*"); //獲取文檔中所有的元素

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

document.anchors

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

document.forms

包含文檔中所有的

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

document.images

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

document.links

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

DOM一致性檢測(cè)

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

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

以下為列出了可以檢測(cè)的不同的值及版本號(hào)

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

XML 1.0、2.0、3.0 Core的XML擴(kuò)展,添加了對(duì)CDATA、處理指令及實(shí)體的支持

HTML 1.0、2.0 XML的HTML擴(kuò)展,添加了對(duì)HTML特有元素及實(shí)體的支持

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

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

CSS 2.0 對(duì)層疊樣式表1級(jí)的支持

CSS2 2.0 對(duì)層疊樣式表2級(jí)的支持

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樹(shù)變化時(shí)引發(fā)的事件

HTMLEvents 2.0 HTML4.01事件

Range 2.0 用于操作DOM樹(shù)中某個(gè)范圍的對(duì)象和方法

Traversal 2.0 遍歷DOM樹(shù)的方法

LS 3.0 文件與DOM樹(shù)之間的同步加載和保存

LS-Async 3.0 文件與DOM樹(shù)之間的異步加載和保存

Validation 3.0 在確保有效的前提下修改DOM樹(shù)的方法

Element類型 HTML元素

所有 HTML 元素都由HTMLElement 類型表示,不是直接通過(guò)這個(gè)類型,也是通過(guò)它的子類型來(lái)表
示。HTMLElement 類型直接繼承自Element 并添加了一些屬性。添加的這些屬性分別對(duì)應(yīng)于每個(gè)HTML
元素中都存在的下列標(biāo)準(zhǔn)特性。

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

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

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

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

className,與元素的class 特性對(duì)應(yīng),即為元素指定的CSS類。沒(méi)有將這個(gè)屬性命名為class,是因?yàn)閏lass 是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";
特性操作

有三個(gè)方法可以操作元素的特性,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");

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

attributes 屬性

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

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

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

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

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

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

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

創(chuàng)建元素

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

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

document.appendChild(div);

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

var div = document.createElement("
");

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

不能設(shè)置動(dòng)態(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é)點(diǎn)由 Text 類型表示,包含的是可以照字面解釋的純文本內(nèi)容。純文本中可以包含轉(zhuǎn)義后的HTML 字符,但不能包含HTML代碼。

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

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

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

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

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

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

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

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

通過(guò)createTextNode()可以創(chuàng)建文本節(jié)點(diǎn).

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

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

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

一個(gè)元素可能會(huì)存在多個(gè)文本節(jié)點(diǎn),但是文本節(jié)點(diǎn)之間也沒(méi)有空格,因此無(wú)法區(qū)分哪個(gè)節(jié)點(diǎn)對(duì)應(yīng)的是哪個(gè)文本,通過(guò)下面的方法可以將element元素的文本節(jié)點(diǎn)合并.

element.normalize();

當(dāng)然也可以分割文本節(jié)點(diǎn),使用splitText(index),index表示字符索引.

var newNode = element.firstChild.splitText(5);從位置5 開(kāi)始。位置5是"Hello"和"world!"之間的空格
alert(element.firstChild.nodeValue); //"Hello"
alert(newNode.nodeValue); //" world!"
alert(element.childNodes.length); //2

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86136.html

相關(guān)文章

  • 虛擬Dom詳解 - ()

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

    ashe 評(píng)論0 收藏0
  • 虛擬DOM

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

    yanwei 評(píng)論0 收藏0
  • 虛擬DOM

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

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

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

    lavor 評(píng)論0 收藏0
  • DOM 事件深入淺出(

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

    macg0406 評(píng)論0 收藏0
  • JavaScript 簡(jiǎn)介

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

    URLOS 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<