摘要:對(duì)象提供了屬性和方法實(shí)現(xiàn)定位頁(yè)面元素功能,這也是的標(biāo)準(zhǔn)規(guī)范中對(duì)象的主要應(yīng)用之一。是返回值,表示定位元素的集合,是一個(gè)集合。定位匹配選擇器的第一個(gè)元素。方法定位頁(yè)面元素所返回的集合就是靜態(tài)集合。
Document 對(duì)象提供了屬性和方法實(shí)現(xiàn)定位頁(yè)面元素功能,這也是 DOM 的標(biāo)準(zhǔn)規(guī)范中 Document 對(duì)象的主要應(yīng)用之一。
定位頁(yè)面元素方法目前 Document 對(duì)象提供實(shí)現(xiàn)定位頁(yè)面元素的方法具有如下幾種:
getElementById()方法:通過(guò)頁(yè)面元素的 id 屬性值定位元素。
getElementsByName()方法:通過(guò)頁(yè)面元素的 name 屬性值定位元素。
getElementsByTagName()方法:通過(guò)頁(yè)面元素的元素名定位元素。
getElementsByClassName()方法:通過(guò)頁(yè)面元素的 class 屬性值定位元素。
querySelector()方法:通過(guò) CSS 選擇器定位第一個(gè)匹配的元素。
querySelectorAll()方法:通過(guò) CSS 選擇器定位所有匹配的元素。
接下來(lái),我們就一一進(jìn)行學(xué)習(xí)。
通過(guò)元素的 ID 屬性值定位元素HTML 頁(yè)面元素的 id 屬性的特點(diǎn)是唯一、不可重復(fù)的,所以通過(guò)這種方式定位的 HTML 頁(yè)面元素也是唯一的。
其語(yǔ)法格式如下:
element = document.getElementById(id);
在上述語(yǔ)法中,id 是參數(shù),表示所要定位元素的 id 屬性值,是一個(gè)大小寫敏感的字符串。element 是返回值,表示定位的元素,是一個(gè) Element 對(duì)象。
值得注意的是: 如果 HTML 頁(yè)面中不存在具有該 id 屬性值的元素,則返回 null。
下面是使用 getElementById() 方法的示例代碼:
var btn = document.getElementById("btn"); // 獲取定位元素的 class 屬性值 var className = btn.className; // 添加 animate 動(dòng)畫樣式 className += " animate"; // 將新的 class 屬性值設(shè)置 btn.className = className;
上述代碼通過(guò) getElementById() 方法定位 HTML 頁(yè)面中 id 屬性值為 btn 的元素,并為其元素的 class 屬性添加 animate 樣式。
通過(guò)元素的 name 屬性值定位元素完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: getElementById()方法完整示例代碼
其語(yǔ)法格式如下:
elements = document.getElementsByName(name);
在上述語(yǔ)法中,name 是參數(shù),表示所要定位元素的 name 屬性值,是一個(gè)大小寫敏感的字符串。elements 是返回值,表示定位元素的集合,是一個(gè) NodeList 集合。
下面是使用 getElementsByName() 方法的示例代碼:
var elems = document.getElementsByName("btn"); // 循環(huán)遍歷所有元素 for (var i=0; i上述代碼通過(guò) getElementsByName() 方法定位 HTML 頁(yè)面中 name 屬性值為 btn 的元素,并遍歷所有得到的元素,為其元素的 class 屬性添加 animate 樣式。
通過(guò)元素的元素名定位元素完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: getElementsByName()方法完整示例代碼
其語(yǔ)法格式如下:
elements = document.getElementsByTagName(name);在上述語(yǔ)法中,name 是參數(shù),表示所要定位元素的元素名,符號(hào)”*”表示所有元素。elements 是返回值,表示定位元素的集合,是一個(gè) NodeList 集合。
下面是使用 getElementsByTagName() 方法的示例代碼:
var elems = document.getElementsByTagName("button"); // 循環(huán)遍歷所有元素 for (var i=0; i上述代碼通過(guò) getElementsByTagName() 方法定位 HTML 頁(yè)面中元素名為 button 的元素,并遍歷所有得到的元素,為其元素的 class 屬性添加 animate 樣式。
通過(guò)元素的 class 屬性值定位元素完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: getElementsByTagName()方法完整示例代碼
其語(yǔ)法格式如下:
elements = document.getElementsByClassName(names);在上述語(yǔ)法中,names 是參數(shù),表示所要定位元素的 class 屬性值列表,class 名稱通過(guò)空格分隔。
值得注意的是: names 參數(shù)可以是一個(gè)樣式屬性名稱,也可以是多個(gè)樣式屬性名稱。
elements 是返回值,表示定位元素的集合,是一個(gè) NodeList 集合。
下面是使用 getElementsByClassName() 方法的示例代碼:
var elems = document.getElementsByClassName("btn"); // 循環(huán)遍歷所有元素 for (var i=0; i上述代碼通過(guò) getElementsByClassName() 方法定位 HTML 頁(yè)面中 class 屬性值為 btn 的元素,并遍歷所有得到的元素,為其元素的 class 屬性添加 animate 樣式。
兼容 IE 8 及之前版本的瀏覽器完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: getElementsByClassName()方法完整示例代碼
getElementsByClassName() 方法只支持 IE 9 版本及之后版本的瀏覽器。也就是說(shuō),該方法并不支持 IE 8 及之前版本的瀏覽器。
下圖是不同瀏覽器的不同版本對(duì) getElementsByClassName() 方法的支持情況:
由于國(guó)內(nèi)的生產(chǎn)環(huán)境中,依舊存在使用 IE 8 及之前版本瀏覽器的情況。所以,我們需要自定義 getElementsByClassName() 方法解決瀏覽器的兼容問(wèn)題。
function getElementsByClassName(element, names) { }上述自定義兼容方法接受兩個(gè)參數(shù),element 參數(shù)表示調(diào)用 getElementsByClassName() 方法的對(duì)象(目前為 Document 對(duì)象),names 參數(shù)表示所要定位元素的 class 屬性值列表。
function getElementsByClassName(element, names) { // 檢測(cè) getElementsByClassName() 是否可用 if (element.getElementsByClassName) { // 優(yōu)先使用 W3C 規(guī)范 return element.getElementsByClassName(names); }else { // 人為解決 IE 8 之前版本不兼容問(wèn)題 } }這里我們要優(yōu)先使用 W3C 規(guī)范的方法。所以,需要先判斷當(dāng)前瀏覽器環(huán)境是否存在 getElementsByClassName() 方法。
如果存在,就使用原本的 getElementsByClassName() 方法。如果不存在,就使用自定義代碼來(lái)實(shí)現(xiàn)。
function getElementsByClassName(element, names) { // 檢測(cè) getElementsByClassName() 是否可用 if (element.getElementsByClassName) { // 優(yōu)先使用 W3C 規(guī)范 return element.getElementsByClassName(names); }else { // 人為解決 IE 8 之前版本不兼容問(wèn)題 // 獲取所有后代元素節(jié)點(diǎn) var elements = element.getElementsByTagName("*"); // 定義空數(shù)組 var result = []; var element, classNameStr, flag; // 將樣式名稱改為數(shù)組類型 names = names.split(" "); // 循環(huán)遍歷所有元素節(jié)點(diǎn) for (var i=0; element = elements[i]; i++) { // 獲取每個(gè)元素節(jié)點(diǎn)的樣式名稱 classNameStr = " " + element.className + " "; // 開啟開關(guān) flag = true; // 循環(huán)遍歷所有的樣式名稱 for (var j=0, name; name = names[j]; j++) { // 判斷當(dāng)前元素節(jié)點(diǎn)的樣式名稱中是否包含指定的樣式名稱 if (classNameStr.indexOf(" " + name + " ") == -1){ // 如果不包含,則關(guān)閉開關(guān),并且結(jié)束循環(huán) flag = false; break; } } // 判斷當(dāng)前元素節(jié)點(diǎn)是否包含指定樣式名稱 if (flag) { // 如果包含,則將當(dāng)前元素節(jié)點(diǎn)添加到數(shù)組中 result.push(element); } } // 返回?cái)?shù)組(所有包含指定樣式名稱的元素節(jié)點(diǎn)) return result; } }通過(guò) CSS 選擇器定位元素CSS 中的選擇器可以很便利地定位 HTML 頁(yè)面元素,DOM 的標(biāo)準(zhǔn)規(guī)范中也提供類似的方法。
querySelector(): 定位匹配選擇器的第一個(gè)元素。
querySelectorAll(): 定位匹配選擇器的所有元素。
querySelector() 方法其語(yǔ)法格式如下:
element = document.querySelector(selectors);在上述語(yǔ)法中,selectors 是參數(shù),表示選擇器,可以包含一個(gè)或多個(gè) CSS 選擇器,多個(gè)則以逗號(hào)分隔。element 是返回值,表示定位元素的集合,匹配的第一個(gè)元素。
下面是使用 querySelector() 方法的示例代碼:
var btn = document.querySelector(’#btn"); // 獲取定位元素的 class 屬性值 var className = btn.className; // 添加 animate 動(dòng)畫樣式 className += " animate"; // 將新的 class 屬性值設(shè)置 btn.className = className;上述代碼通過(guò) querySelector() 方法定位 HTML 頁(yè)面中 id 屬性值為 btn 的元素,并為其元素的 class 屬性添加 animate 樣式。
querySelectorAll() 方法完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: querySelector()方法完整示例代碼
其語(yǔ)法格式如下:
elements = document.querySelectorAll(selectors);在上述語(yǔ)法中,selectors 是參數(shù),表示選擇器,可以包含一個(gè)或多個(gè) CSS 選擇器,多個(gè)則以逗號(hào)分隔。elements 是返回值,表示定位元素的集合,是一個(gè) NodeList 集合。
下面是使用 querySelectorAll() 方法的示例代碼:
var elems = document.querySelectorAll("button"); // 循環(huán)遍歷所有元素 for (var i=0; i上述代碼通過(guò) querySelectorAll() 方法定位 HTML 頁(yè)面中元素名為 button 的元素,并遍歷所有得到的元素,為其元素的 class 屬性添加 animate 樣式。
節(jié)點(diǎn)集合 NodeList完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: querySelectorAll()方法完整示例代碼
NodeList 是一組元素節(jié)點(diǎn)的集合,每個(gè)節(jié)點(diǎn)具有相應(yīng)的索引值(從 0 開始的數(shù)字,類似于數(shù)組)。
元素節(jié)點(diǎn)在 NodeList 集合中存儲(chǔ)的順序與它們?cè)?HTML 頁(yè)面中的順序保持一致。
NodeList 的屬性 length 表示 NodeList 對(duì)象中包含的節(jié)點(diǎn)個(gè)數(shù)。方法 item(index) 表示返回 NodeList 對(duì)象中指定索引的節(jié)點(diǎn)。如果索引值越界,則返回 null。
NodeList 集合分為兩種: 動(dòng)態(tài) NodeList 和靜態(tài) NodeList。
動(dòng)態(tài)的 NodeList 集合所謂動(dòng)態(tài)的 NodeList 集合,就是如果文檔中的節(jié)點(diǎn)樹發(fā)生變化,則已經(jīng)存在的 NodeList 對(duì)象也可能會(huì)變化。
以下幾種定位 HTML 頁(yè)面元素的方法返回的都是動(dòng)態(tài)的 NodeList 集合。
getElementsByName()方法:通過(guò)頁(yè)面元素的 name 屬性值定位元素。
getElementsByTagName()方法:通過(guò)頁(yè)面元素的元素名定位元素。
getElementsByClassName()方法:通過(guò)頁(yè)面元素的 class 屬性值定位元素。
我們可以通過(guò)以下示例代碼,體驗(yàn)動(dòng)態(tài) NodeList 集合的特點(diǎn):
var elems = document.getElementsByTagName("button"); console.log(elems.length);// 輸出 3 // 添加一個(gè)新的button按鈕 var btn = document.createElement("button"); btn.setAttribute("class","button"); var text = document.createTextNode("New Button"); btn.appendChild(text); var div = document.getElementsByClassName("button-group")[0]; div.appendChild(btn); console.log(elems.length);// 輸出 4上述代碼通過(guò) getElementsByTagName() 方法定位 HTML 頁(yè)面中所有的 button 元素,測(cè)試打印 button 元素的個(gè)數(shù)是 3 個(gè)。
然后,我們創(chuàng)建一個(gè)新的 button 元素,并且將其添加到 HTML 頁(yè)面中,再測(cè)試打印 button 元素的個(gè)數(shù)是 4 個(gè)。
靜態(tài) NodeList 集合值得注意的是: 我們?cè)诘诙螠y(cè)試打印 button 元素的個(gè)數(shù)時(shí),并沒(méi)有重新定位 HTML 頁(yè)面中的 button 元素。
完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: 動(dòng)態(tài) NodeList 集合完整示例代碼
所謂靜態(tài) NodeList 集合,就是對(duì)文檔對(duì)象模型的任何改動(dòng)都不會(huì)影響集合的內(nèi)容。
querySelectorAll() 方法定位 HTML 頁(yè)面元素所返回的 NodeList 集合就是靜態(tài) NodeList 集合。
我們可以通過(guò)以下示例代碼,體驗(yàn)靜態(tài) NodeList 集合的特點(diǎn):
var elems = document.querySelectorAll("button"); console.log(elems.length);// 輸出 3 // 添加一個(gè)新的button按鈕 var btn = document.createElement("button"); btn.setAttribute("class","button"); var text = document.createTextNode("New Button"); btn.appendChild(text); var div = document.getElementsByClassName("button-group")[0]; div.appendChild(btn); console.log(elems.length);// 輸出 3上述代碼通過(guò) querySelectorAll() 方法定位 HTML 頁(yè)面中所有的 button 元素,測(cè)試打印 button 元素的個(gè)數(shù)是 3 個(gè)。
然后,我們創(chuàng)建一個(gè)新的 button 元素,并且將其添加到 HTML 頁(yè)面中,再測(cè)試打印 button 元素的個(gè)數(shù)依舊是 3 個(gè)。
定位頁(yè)面元素屬性完整示例代碼請(qǐng)點(diǎn)擊右邊的鏈接: 靜態(tài) NodeList 集合完整示例代碼
Document 對(duì)象也提供了一些屬性,來(lái)定位 HTML 頁(yè)面中一些比較特殊的元素。
documentElement:獲取 HTML 頁(yè)面中的 元素。
head:獲取 HTML 頁(yè)面中的 元素。
title:獲取 HTML 頁(yè)面中的
元素。 body:獲取 HTML 頁(yè)面中的 元素。
images:獲取 HTML 頁(yè)面中的所有 元素。
我們可以定義一個(gè)包含以上元素的 HTML 頁(yè)面,然后通過(guò)以下示例代碼進(jìn)行測(cè)試:
console.log(document.documentElement); console.log(document.head); console.log(document.body); console.log(document.title); console.log(document.links); console.log(document.images);本教程免費(fèi)開源,任何人都可以免費(fèi)學(xué)習(xí)、分享,甚至可以進(jìn)行修改。但需要注明作者及來(lái)源,并且不能用于商業(yè)。
本教程采用知識(shí)共享署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際許可協(xié)議進(jìn)行許可。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84063.html
摘要:對(duì)象提供了屬性和方法實(shí)現(xiàn)定位頁(yè)面元素功能。定位匹配選擇器的第一個(gè)元素。是返回值,表示定位元素的集合,是一個(gè)集合。下面是使用方法的示例代碼循環(huán)遍歷所有元素上述代碼通過(guò)方法定位頁(yè)面中元素名為的元素,并遍歷所有得到的元素,為其元素的屬性添加樣式。 Element 對(duì)象提供了屬性和方法實(shí)現(xiàn)定位頁(yè)面元素功能。該對(duì)象與 Document 對(duì)象提供的屬性和方法實(shí)現(xiàn)定位頁(yè)面元素功能的區(qū)別在于,Docu...
摘要:簡(jiǎn)單來(lái)說(shuō),節(jié)點(diǎn)作為樹結(jié)構(gòu)中的連接點(diǎn),最終構(gòu)成了完整的樹結(jié)構(gòu)。節(jié)點(diǎn)樹結(jié)構(gòu)通過(guò)節(jié)點(diǎn)概念,我們可以將原本的樹結(jié)構(gòu)改成節(jié)點(diǎn)樹結(jié)構(gòu)進(jìn)行表示。節(jié)點(diǎn)之間的關(guān)系中的表示模型,也可以用來(lái)表示節(jié)點(diǎn)樹結(jié)構(gòu)中節(jié)點(diǎn)之間的關(guān)系。值得注意的是和元素并不是兄弟關(guān)系。 DOM 樹結(jié)構(gòu) DOM 之所以可以訪問(wèn)和更新 HTML 頁(yè)面中的內(nèi)容、結(jié)構(gòu)和樣式,是因?yàn)?DOM 將 HTML 頁(yè)面解析為一個(gè) 樹結(jié)構(gòu)。 例如下面這段代...
摘要:回顧什么是內(nèi)聯(lián)樣式所謂內(nèi)聯(lián)樣式,就是通過(guò)頁(yè)面元素的屬性為當(dāng)前元素定義樣式。對(duì)象提供的屬性和方法可以幫助我們獲取樣式的具體內(nèi)容。遍歷對(duì)象由于對(duì)象具有屬性,返回該對(duì)象的屬性的數(shù)量。方法通過(guò)獲取的樣式屬性名,這種方式也可以通過(guò)方式進(jìn)行替換。 回顧什么是內(nèi)聯(lián)樣式 所謂內(nèi)聯(lián)樣式,就是通過(guò) HTML 頁(yè)面元素的 style 屬性為當(dāng)前元素定義 CSS 樣式。 以下代碼示例,就是通過(guò) style 屬...
摘要:系列教程是一套免費(fèi)開源,任何人都可以免費(fèi)學(xué)習(xí)分享,甚至可以進(jìn)行修改。本文是這套系列教程的索引也就是目錄第一回介紹在最開始,我們先來(lái)了解是什么的作用,以及瀏覽器的支持是怎么樣的。 《EASYDOM》系列教程是一套免費(fèi)、開源,任何人都可以免費(fèi)學(xué)習(xí)、分享,甚至可以進(jìn)行修改。但需要注明作者及來(lái)源,并且不能用于商業(yè)。 本文是這套系列教程的索引(也就是目錄): 第一回 DOM 介紹 在最開始,我...
摘要:對(duì)象的作用對(duì)象作為訪問(wèn)和更新頁(yè)面內(nèi)容的入口。這個(gè)結(jié)果充分地說(shuō)明了對(duì)象在的標(biāo)準(zhǔn)規(guī)范中代表整個(gè)頁(yè)面。對(duì)象的繼承鏈對(duì)象是繼承于對(duì)象的。對(duì)象也是的標(biāo)準(zhǔn)規(guī)范中非常重要的對(duì)象之一,而對(duì)象又是繼承于對(duì)象。 Document 對(duì)象是 DOM 的標(biāo)準(zhǔn)規(guī)范中比較重要的對(duì)象之一。該對(duì)象提供了訪問(wèn)和更新 HTML 頁(yè)面內(nèi)容的屬性和方法。 Document 對(duì)象的作用 Document 對(duì)象作為 DOM 訪問(wèn)和...
閱讀 3500·2021-11-18 10:07
閱讀 1595·2021-11-04 16:08
閱讀 1522·2021-11-02 14:43
閱讀 1098·2021-10-09 09:59
閱讀 852·2021-09-08 10:43
閱讀 1087·2021-09-07 09:59
閱讀 975·2019-12-27 11:56
閱讀 1027·2019-08-30 15:56