JavaScript筆記05
操作 BOM 對象(重點(diǎn))
什么是 BOM
- BOM(Browser Object Model)是指瀏覽器對象模型,是用于描述這種對象與對象之間層次關(guān)系的模型。
- 瀏覽器對象模型(BOM)提供了獨(dú)立于內(nèi)容的、可以與瀏覽器窗口進(jìn)行互動的對象結(jié)構(gòu)。
瀏覽器
- 主流的瀏覽器分為 IE、Microsoft Edge、Chrome、Firefox、Safari、Opera 等幾大類
- 瀏覽器的種類很多,但是主流的內(nèi)核只有四種,各種不同的瀏覽器,就是在主流內(nèi)核的基礎(chǔ)上,添加不同的功能構(gòu)成。
-
- Trident 內(nèi)核:代表產(chǎn)品為 Internet Explorer,又稱其為IE內(nèi)核。
-
- Gecko 內(nèi)核:代表作品為 Mozilla Firefox。
-
- WebKit 內(nèi)核:代表作品有Safari、Chrome。
-
- Presto內(nèi)核:代表作品 Opera。
-
window
-
window
對象代表瀏覽器窗口。 - 常用的實(shí)例方法/屬性:
window.alert(1) // 彈窗
window.innerHeight // 獲取瀏覽器窗口的內(nèi)容區(qū)域的高度
window.innerWidth // 獲取瀏覽器窗口的內(nèi)容區(qū)域的寬度
window.outerHeight // 獲取瀏覽器窗口外側(cè)的高度
window.outerWidth // 獲取瀏覽器窗口外側(cè)的寬度
- 測試:
navigator(不建議使用)
-
navigator
封裝了一些瀏覽器信息。 - 常用的屬性:
navigator.appName // 返回瀏覽器官方名稱。不能保證此屬性返回的值是正確的。
navigator.appVersion // 返回瀏覽器版本。不能保證此屬性返回的值是正確的。
navigator.userAgent // 返回當(dāng)前瀏覽器的用戶代理。
navigator.platform // 返回瀏覽器平臺名,不確定此值是否有效。
- 測試:
- 大多數(shù)時候,我們不會使用
navigator
對象,因?yàn)闀蝗藶樾薷摹?/li> - 不建議使用這些屬性來判斷和編寫代碼。
screen
-
screen
代表當(dāng)前渲染窗口中和屏幕有關(guān)的屬性。 - 常用的屬性:
screen.width // 以像素為單位返回屏幕的寬度
screen.height // 以像素為單位返回屏幕的高度
- 測試:
location
-
location
代表當(dāng)前頁面的 URL 信息。 - 常用的屬性:
location.host // 域名字符串
location.href // URL字符串
location.protocol // URL對應(yīng)協(xié)議的字符串
- 測試:
- 補(bǔ)充 - 常用的方法:
location.reload() // 重新加載來自當(dāng)前URL的資源(刷新網(wǎng)頁)
location.assign('URL') // 加載給定URL的內(nèi)容資源到這個location對象所關(guān)聯(lián)的對象上
document
-
document
代表當(dāng)前載入的頁面,并作為網(wǎng)頁內(nèi)容的入口,也就是 DOM 樹。 - 常用的屬性:
document.title // 獲取或設(shè)置當(dāng)前文檔的標(biāo)題
document.cookie // 返回一個使用分號分隔的cookie列表,或設(shè)置(寫入)一個cookie
- 測試:
- 拓展 - 劫持 cookie 的原理:參考 - 說說劫持 Cookie 的原理 - 掘金 (juejin.cn)
- 服務(wù)器端可以通過設(shè)置
cookie:httpOnly
來保障 cookie 的安全(后面再詳細(xì)學(xué)習(xí))
- 服務(wù)器端可以通過設(shè)置
- 常用的方法:
// 獲取具體的DOM文檔樹節(jié)點(diǎn)
document.getElementById() // 返回具有給定id標(biāo)識元素的引用對象。
document.getElementsByClassName() // 返回具有給定類名的元素列表。
document.getElementsByTagName() // 返回具有給定標(biāo)簽名的元素列表。
- 測試:先準(zhǔn)備一個網(wǎng)頁,它包含一個自定義列表:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 自定義一個列表 -->
<dl id="app">
<dt>Java</dt>
<dd>JavaSE</dd>
<dd>JavaEE</dd>
</dl>
</body>
</html>
- 在瀏覽器控制臺中輸入
document.getElementById("app")
來獲取指定的文檔樹節(jié)點(diǎn):
history(不建議使用)
-
history
允許操作瀏覽器的曾經(jīng)在標(biāo)簽頁或者框架里訪問的會話歷史記錄。 - 常用的方法:
history.back() // 轉(zhuǎn)到瀏覽器會話歷史的上一頁,等同于點(diǎn)擊瀏覽器的回退按鈕
history.forward() // 轉(zhuǎn)到瀏覽器會話歷史的下一頁,等同于點(diǎn)擊瀏覽器的前進(jìn)按鈕
- 測試:
操作 DOM 節(jié)點(diǎn)(重點(diǎn))
什么是 DOM
- DOM(Document Object Model)是指文檔對象模型,是用來呈現(xiàn)與任意 HTML 或 XML 文檔交互的 API。
- DOM 是載入到瀏覽器中的文檔模型,以節(jié)點(diǎn)樹的形式來表現(xiàn)文檔,每個節(jié)點(diǎn)代表文檔的構(gòu)成部分(例如:頁面元素、字符串或注釋等等)。
核心
- 瀏覽器網(wǎng)頁就是一個 DOM 數(shù)型結(jié)構(gòu)。
- 更新:更新 DOM 節(jié)點(diǎn)
- 遍歷:得到 DOM 節(jié)點(diǎn)
- 刪除:刪除一個 DOM 節(jié)點(diǎn)
- 添加:添加一個新的 DOM 節(jié)點(diǎn)
- 要操作一個 DOM 節(jié)點(diǎn),就必須先獲得這個 DOM 節(jié)點(diǎn)
獲得 DOM 節(jié)點(diǎn)
- 屬性:
document.getElementById() // 返回具有給定id標(biāo)識元素的引用對象。
document.getElementsByClassName() // 返回具有給定類名的元素列表。
document.getElementsByTagName() // 返回具有給定標(biāo)簽名的元素列表。
- 例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="father">
<h1>標(biāo)題一</h1>
<p id="p1">p1</p>
<p class="p2">p2</p>
</div>
<script>
// 獲取 DOM 節(jié)點(diǎn),對應(yīng) CSS 選擇器
let h1 = document.getElementsByTagName("h1"); // 標(biāo)簽
let p1 = document.getElementById("p1"); // id
let p2 = document.getElementsByClassName("p2"); // class
let father = document.getElementsByTagName("father");
let children = father.children; // 獲取父節(jié)點(diǎn)下的所有子節(jié)點(diǎn)
// father.firstChild
// father.lastChild
</script>
</body>
</html>
- 測試:
- 以上是使用原生代碼獲得 DOM 節(jié)點(diǎn)的方式,之后我們主要是使用
jQuery();
來獲得 DOM 節(jié)點(diǎn);
更新 DOM 節(jié)點(diǎn)
- 屬性:
// 操作文本
element.innerText // 修改文本的值
element.innerHTML // 可以解析 HTML 標(biāo)簽
// 操作 CSS
// element.style - 設(shè)置 CSS 樣式
element.style.color // 字體顏色
element.style.fontSize // 字體大小(注意是駝峰命名)
element.style.padding // 內(nèi)邊距...
- 例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="id1"></div>
<div id="id2"></div>
<div id="id3">abc</div>
<script>
// 獲取 DOM 節(jié)點(diǎn)
let id1 = document.getElementById("id1");
let id2 = document.getElementById("id2");
let id3 = document.getElementById("id3");
// 操作文本
// innerText - 修改文本的值
id1.innerText = "hello";
// innerHTML - 可以解析 HTML 標(biāo)簽
id2.innerHTML = "<strong>world</strong>";
// 操作 CSS
// style - 設(shè)置 CSS 樣式
id3.style.color = "red";
id3.style.fontSize = "50px";
id3.style.padding = "2em";
</script>
</body>
</html>
- 查看網(wǎng)頁效果:
刪除 DOM 節(jié)點(diǎn)
- 刪除 DOM 節(jié)點(diǎn)的步驟:先獲取父節(jié)點(diǎn),再通過父節(jié)點(diǎn)來刪除自身。
- 屬性/方法:
element.parentElement // 獲取當(dāng)前節(jié)點(diǎn)的父元素節(jié)點(diǎn)。如果該元素沒有父節(jié)點(diǎn),或者父節(jié)點(diǎn)不是一個 DOM 元素,則返回 null。
element.removeChild(child) // 從 DOM 中刪除一個子節(jié)點(diǎn)。返回刪除的節(jié)點(diǎn)。
- 例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<h1>標(biāo)題一</h1>
<p id="p1">p1</p>
<p class="p2">p2</p>
</div>
<script>
// 獲取 DOM 節(jié)點(diǎn)
let self = document.getElementById("p1");
// 獲取父節(jié)點(diǎn)
let father = self.parentElement;
// 刪除 DOM 節(jié)點(diǎn)
father.removeChild(self); // 方式一
father.removeChild(father.children[0]); // 方式二
</script>
</body>
</html>
- 查看刪除元素后的網(wǎng)頁效果:
- 需要注意的是:刪除節(jié)點(diǎn)是一個動態(tài)的過程,每進(jìn)行一次刪除操作,父元素的
children
都會發(fā)生變化,因此我們在使用father.children[index]
刪除多個節(jié)點(diǎn)時一定要注意!
插入 DOM 節(jié)點(diǎn)
- 我們在獲得了某個 DOM 節(jié)點(diǎn)后,假設(shè)這個 DOM 節(jié)點(diǎn)是空的,我們通過使用
innerHTML
屬性就可以增加一個元素了。但是當(dāng)這個 DOM 節(jié)點(diǎn)已經(jīng)存在元素了時,我們就不能通過此方法添加元素了,因?yàn)檫@樣會產(chǎn)生覆蓋。
將已存在的標(biāo)簽追加到末尾,實(shí)現(xiàn)插入節(jié)點(diǎn)
- 方法:
element.appendChild(aChild) // 將一個節(jié)點(diǎn)追加到指定父節(jié)點(diǎn)的子節(jié)點(diǎn)列表的末尾處。如果將被插入的節(jié)點(diǎn)已經(jīng)存在于當(dāng)前文檔的文檔樹中,那么 appendChild() 只會將它從原先的位置移動到新的位置(不需要事先移除要移動的節(jié)點(diǎn))。
- 例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
let js = document.getElementById("js");
let list = document.getElementById("list");
list.appendChild(js); // 追加到末尾
</script>
</body>
</html>
- 查看插入節(jié)點(diǎn)后的網(wǎng)頁效果:
創(chuàng)建一個新的標(biāo)簽,實(shí)現(xiàn)插入節(jié)點(diǎn)
- 方法:
element.setAttribute(name, value) // 設(shè)置指定元素上的某個屬性值。如果屬性已經(jīng)存在,則更新該值;否則,使用指定的名稱和值添加一個新的屬性。
- 例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
let body = document.getElementsByTagName("body");
let list = document.getElementById("list");
// 創(chuàng)建一個新的節(jié)點(diǎn),實(shí)現(xiàn)插入
// 方式一
let newP = document.createElement("p"); // 創(chuàng)建一個 p 標(biāo)簽
newP.id = "newP"; // 設(shè)置 id
newP.innerText = "hello,world"; // 添加文本
list.appendChild(newP); // 追加到 list 的子節(jié)點(diǎn)的末尾
// 方式二
let myScript = document.createElement("script"); // 創(chuàng)建一個 script 標(biāo)簽
myScript.setAttribute("type", "text/javascript"); // 設(shè)置 type 屬性為 text/javascript
list.appendChild(myScript); // 追加到 list 的子節(jié)點(diǎn)的末尾
// 應(yīng)用案例: 修改 body 的 CSS 樣式
// 方式一
let bd = document.getElementsByTagName("body")[0]; // 注意: getElementsByTagName()獲得的是一個列表,所以要加索引
bd.style.backgroundColor = "skyblue"; // 設(shè)置 body 的背景顏色為天藍(lán)色
// 方式二
let myStyle = document.createElement("style"); // 創(chuàng)建一個空的 style 標(biāo)簽
myStyle.setAttribute("type", "text/css"); // 設(shè)置 type 屬性
myStyle.innerHTML = "body{color: red}"; // 設(shè)置 body 的字體顏色為紅色
document.getElementsByTagName("head")[0].appendChild(myStyle); // 追加到 head 的子節(jié)點(diǎn)的末尾
</script>
</body>
</html>
- 查看插入節(jié)點(diǎn)后的網(wǎng)頁效果:
補(bǔ)充:根據(jù)參考節(jié)點(diǎn)的位置插入新節(jié)點(diǎn)文章來源:http://www.zghlxwxcb.cn/news/detail-731523.html
- 方法:
parentNode.insertBefore(newNode, referenceNode) // 在參考節(jié)點(diǎn)之前插入一個擁有指定父節(jié)點(diǎn)的子節(jié)點(diǎn)。如果給定的子節(jié)點(diǎn)是對文檔中現(xiàn)有節(jié)點(diǎn)的引用,insertBefore() 會將其從當(dāng)前位置移動到新位置(在將節(jié)點(diǎn)附加到其他節(jié)點(diǎn)之前,不需要從其父節(jié)點(diǎn)刪除該節(jié)點(diǎn))。
- 例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p id="js">JavaScript</p>
<div id="list">
<p id="se">JavaSE</p>
<p id="ee">JavaEE</p>
<p id="me">JavaME</p>
</div>
<script>
let ee = document.getElementById("ee");
let js = document.getElementById("js");
let list = document.getElementById("list");
list.insertBefore(js, ee); // 將新節(jié)點(diǎn) js 插入到參考節(jié)點(diǎn) ee 之前
</script>
</body>
</html>
- 查看插入節(jié)點(diǎn)后的網(wǎng)頁效果:
文章來源地址http://www.zghlxwxcb.cn/news/detail-731523.html
到了這里,關(guān)于JavaScript學(xué)習(xí)筆記05的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!