BOM 對象
BOM 簡介
- BOM(browser Object Model)即瀏覽器對象模型
- BOM 由一系列對象組成,是訪問、控制、修改瀏覽器的屬性的方法
- BOM 沒有統(tǒng)一的標準(每種客戶端都可以自定標準)。
- BOM 的頂層是 window 對象
window 對象
window 對象表示瀏覽器中打開的窗口。
使用 window 對象中的屬性和方法,可以省略對象名,直接寫方法名和對象名
-
屬性:
- location :當前 URL 的信息
- history :客戶訪問過的 URL 的信息
- screen :客戶端的屏幕信息
- navigator :瀏覽器基本信息
- document :文檔對象
-
函數(shù):
彈框
// 提示框(顯示帶有一段消息和一個確認按鈕的警告框) alert(提示信息); // 確認框(顯示帶有一段消息以及確認按鈕和取消按鈕的對話框)。點擊確定,返回true;點擊取消,返回false confirm(提示信息); // 輸入框(顯示可提示用戶輸入的對話框)。點擊確定,返回輸入的內(nèi)容;點擊取消,返回null prompt(提示信息);
瀏覽器窗口
// 打開一個新的瀏覽器窗口或查找一個已命名的窗口 open(網(wǎng)址) // 關(guān)閉瀏覽器窗口 close()
定時器
// 執(zhí)行一次的定時器 setTimeout(函數(shù), 毫秒值); // 反復(fù)執(zhí)行的定時器 setInterval(函數(shù), 毫秒值); // 參數(shù): // 函數(shù):定義一個有名函數(shù),傳遞函數(shù)名字,或者使用匿名函數(shù) // 毫秒值:設(shè)置定時器的時間,在指定的時間結(jié)束之后,會執(zhí)行傳遞的函數(shù) // 返回值:返回的是定時器的 id 值,可以用于取消定時器使用 // 取消執(zhí)行一次的定時器 clearTimeout(定時器的id值); // 取消反復(fù)執(zhí)行的定時器 clearInterval(定時器的id值);
示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-845873.html
var timeId = setTimeout(function () { alert("c4爆炸了!"); }, 5000); //alert(timeId); // 2 function butOnclick() { // 取消執(zhí)行一次的定時器 cl }
location 對象
Location 對象包含有關(guān)當前 URL(瀏覽器的地址)的信息。
-
屬性:
-
href :獲取當前瀏覽器的url地址
href = “新的url地址” : 跳轉(zhuǎn)頁面,相當于在瀏覽器地址欄中輸入了地址,并且敲擊回車(打開頁面)
-
hostname :主機名
- port :端口名
- host :主機名+端口名
-
-
方法:
- reload() :重新加載當前文檔。 刷新頁面
web 存儲
-
HTML5 為 JS 增加了兩個可以存儲數(shù)據(jù)的對象
- localStorage :本地存儲,永久存儲數(shù)據(jù),作用域:所有頁面永久訪問
- sessionStorage :會話存儲,臨時存儲數(shù)據(jù),作用域:一次會話(連續(xù)跳轉(zhuǎn)的幾個頁面)
-
不管是 localStorage,還是 sessionStorage,可使用的 API 都相同
常用函數(shù)(以 localStorage 為例):
- setItem(key, value) :存儲一個數(shù)據(jù)
- getItem(key) :獲取一個數(shù)據(jù)
- removeItem(key) :刪除一個數(shù)據(jù)
- clear() :清除所有數(shù)據(jù)
history 對象
History 對象包含用戶(在瀏覽器窗口中)訪問過的 URL。
History 對象是 window 對象的一部分,可通過 window.history 屬性對其進行訪問。
函數(shù):
- back() :后退到前一個頁面(加載 history 列表中的前一個 URL)
- forward() :前進到后一個頁面(加載 history 列表中的下一個 URL)
- go(n) :直接前進到第 n 個頁面
- go(-n) :直接后退到第 n 個頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>history對象</title>
<script>
//創(chuàng)建鼠標點擊事件的響應(yīng)函數(shù)
function goBack() {
window.history.back();
}
function goForward() {
window.history.forward();
}
</script>
</head>
<body>
<input type="button" value="上一步" onclick="goBack()"/>
<input type="button" value="下一步" onclick="goForward()"/>
<a href="04_history對象.html">跳轉(zhuǎn)到04_history對象.html</a>
</body>
</html>
screen 對象
Screen 對象包含有關(guān)客戶端顯示屏幕的信息。
screen 對象中的屬性,可以通過 screen.屬性名 直接使用
屬性:
- height :返回顯示屏幕的高度(像素)
- width :返回顯示器屏幕的寬度(像素)
navigator 對象
navigator 對象包含有關(guān)瀏覽器的信息。
navigator 對象中的屬性,可以通過 navigator.屬性名 直接使用
屬性:
- appName :返回瀏覽器的名稱
- appVersion :返回瀏覽器的平臺和版本信息
- userAgent :瀏覽器類型
超鏈接與表單的跳轉(zhuǎn)控制
-
超鏈接和表單都可以進行跳轉(zhuǎn)。跳轉(zhuǎn)屬于它們的默認功能。
-
一般在它們觸發(fā)的一個事件中,可以通過返回 false,來阻止他們的跳轉(zhuǎn)!
<br />function fun5(){ alert('超鏈接被點擊了!'); return false; } function f() { alert("阻止表單提交"); return false; } <a href="https://www.baidu.com" onclick="return fun5()">超鏈接</a> //阻止提交 <a href="javascript:void(0)">我是超鏈接</a> <form action="http://www.baidu.com" onsubmit="return f()"> <input type="submit"> </form>
DOM 對象
DOM 是 document object model,也就是文檔對象模型。
可以將 HTML 頁面看做一個文檔,在 js 眼中就是一個 document 對象。
這個 document 對象中就包含了頁面中的所有元素。
DOM 中的節(jié)點分類:
- 元素節(jié)點(element node)
- 屬性節(jié)點(attribute node)
- 文本節(jié)點(text node)
dom 獲取元素
-
方式1:es6 提供了強大的根據(jù) CSS 選擇器獲取元素的接口(推薦)
// 根據(jù)css選擇器獲取一個元素 document.querySelector(CSS選擇器) // 根據(jù)css選擇器獲取元素對象數(shù)組集合 document.querySelectorAll(CSS選擇器)
-
方式2:es5 提供的獲取元素的接口
// 根據(jù) id 獲取一個元素: document.getElementById(ID) // 等價于es6的 querySelector(#ID) // 根據(jù) class 獲取多個元素: document.getElementsByClassName(class) // 等價于es6的 querySelectorAll(.class) // 根據(jù)標簽名稱獲取多個元素: document.getElementsByTagName(標簽名稱) // 等價于es6的 querySelectorAll(標簽) // 根據(jù) name 屬性獲取多個元素: document.getElementsByName('name值') // 等價于es6的 querySelectorAll(元素名稱[name=name值])
-
小總結(jié):
- es6 接口獲取元素功能非常強大,而且接口非常易用
- es5 接口功能非常局限,而且接口使用復(fù)雜
間接根據(jù)層次關(guān)系獲取節(jié)點:
- 父節(jié)點:parentNode:表示該元素的父節(jié)點
- 孩子節(jié)點:
- childNodes:表示該元素的所有子節(jié)點的集合,數(shù)組對象
- firstElementChild:第一個兒子節(jié)點
- lastElementChild:最后一個兒子節(jié)點
- 兄弟節(jié)點:
- nextElementSibling:該元素后一個兄弟元素節(jié)點
- previousElementSibling:該元素前一個兄弟元素節(jié)點
dom 操作內(nèi)容
-
常用函數(shù)
// 向body中追加html內(nèi)容 document.write(html內(nèi)容) // 獲取或者修改元素的純文本內(nèi)容(從元素內(nèi)部起始位置到終止位置的文本內(nèi)容, 不包含內(nèi)部的Html標簽) element對象.innerText; // 獲取或者修改元素的html內(nèi)容(從元素內(nèi)部的起始位置到終止位置的全部內(nèi)容, 包括其內(nèi)部的Html標簽) element對象.innerHTML; // 獲取或者修改包含自身的html內(nèi)容 element對象.outerHTML;
-
示例
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>dom操作內(nèi)容</title> </head> <body> <div id="d1">我是d1<br/></div> <div id="d2">我是d2</div> <div id="d3">我是d3</div> <script> // 向body中追加html內(nèi)容 document.write("<h1>我是h1標題標簽</h1>"); // 獲取元素的純文本,html內(nèi)容對比 var d1Ele = document.querySelector("#d1"); // 獲取id是d1的元素 <div id="d1">我是d1<br/></div> console.log(d1Ele.innerText); //我是d1 ==>標簽中的文本 console.log(d1Ele.innerHTML); //我是d1<br> ==>標簽體 console.log(d1Ele.outerHTML); //<div id="d1">我是d1<br></div> ==>整個標簽 // 修改元素的純文本,html內(nèi)容對比 var d2Ele = document.querySelector("#d2"); //獲取id是d2的元素 <div id="d2">我是d2</div> //d2Ele.innerText = "<h2>我是h2標簽體標簽</h2>"; //顯示純文本 d2Ele.innerHTML = "<h2>我是h2標簽體標簽</h2>"; //顯示標簽 // 獲取或修改包含元素自身的html內(nèi)容(了解) var d3Ele = document.querySelector("#d3"); //獲取id是d3的元素 <div id="d3">我是d3</div> console.log(d3Ele.outerHTML); //<div id="d3">我是d3</div> d3Ele.outerHTML = "<h3>我是h3標簽體標簽</h3>"; //把d3的div整個替換為了h3標簽 </script> </body> </html>
dom 操作屬性
-
方法1:
// 獲取元素的一個屬性的值。注意:只能獲取標簽上屬性的值,獲取不用用戶輸入的內(nèi)容 element對象.getAttribute(屬性名) // 給元素設(shè)置一個屬性,可以設(shè)置原生和自定義 element對象.setAttribute(屬性名, 屬性值) // 移除元素的一個屬性 element對象.removeAttribute(屬性名)
-
方法2:
// 獲取或修改一個屬性的值 element對象.屬性名
-
注:
- 方法1 可以對自定義屬性進行操作;但是 方法2 只能對標準屬性進行操作。
- 文本輸入框標簽:通過對象名.value 屬性,可以獲取到頁面中用戶輸入的內(nèi)容。
- 復(fù)選框|單選框標簽:
- 通過 對象名.checked 屬性可以獲取到選中狀態(tài)。選中:true;未選中:false
- 通過 對象名.getAttribute() 函數(shù)獲取屬性值:有 checked 屬性,值就是 checked;沒有 checked 屬性,值就是 null
dom 操作元素
-
常用方法
// 獲取或者設(shè)置標簽的html內(nèi)容 element對象.innerHTML // 移除元素 element對象.outerHTML="" // 創(chuàng)造一個節(jié)點,返回一個element對象 document.createElement("標簽名稱) // 給父標簽添加一個子標簽 parentElement對象.appendChild(newNode) // 在指定節(jié)點前插入新節(jié)點 parentElement對象.insertBefore(newNode,beforeNode) // 替換節(jié)點的方法 parentElement對象.replaceChild(newNode, oldNode) // 刪除節(jié)點的方法 parentElement對象.removeChild(childNode)
-
示例:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>dom操作元素</title> </head> <body> <div id="container"> <input id="smoke" type="checkbox" name="hobby" value="抽煙"> <label for="smoke">抽煙 </label> <!-- <input id="drink" type="checkbox" name="hobby" value="喝酒">--> <!-- <label for="drink">喝酒 </label>--> <!-- <input id="perm" type="checkbox" name="hobby" value="燙頭">--> <!-- <label for="perm">燙頭 </label>--> </div> <script > //獲取div標簽對象 var divEle = document.querySelector("#container"); // 添加喝酒 innerHTML console.log(divEle.innerHTML); divEle.innerHTML += "<input id='drink' type='checkbox' name='hobby' value='喝酒'>" + "<label for='drink'>喝酒 </label>"; // 添加燙頭 // 創(chuàng)建input標簽,使用document對象中方法createElement("標簽名稱") var inputEle = document.createElement("input"); console.log(inputEle); //<input> // <input id="perm" type="checkbox" name="hobby" value="燙頭"> inputEle.setAttribute("id","perm"); console.log(inputEle); //<input id="perm"> inputEle.setAttribute("type","checkbox"); inputEle.setAttribute("name","hobby"); inputEle.setAttribute("value","燙頭"); console.log(inputEle); //<input type="checkbox" id="perm" name="hobby" value="燙頭"> // <label for="perm">燙頭 </label> // 創(chuàng)建標簽 var lableEle = document.createElement("lable"); // 添加屬性 lableEle.setAttribute("for","perm"); console.log(lableEle); //<lable for="perm"> // 添加標簽體 lableEle.innerHTML="燙頭 "; console.log(lableEle); //<label for="perm">燙頭 </label> // 使用父標簽div中的方法appendChild(子標簽);添加子標簽 divEle.appendChild(inputEle); divEle.appendChild(lableEle); // 移除元素(了解) outerHTML //lableEle.outerHTML = ""; //刪除label標簽 </script> </body> </html>
dom 操作樣式
-
通過 style 對象
// 獲取或者修改一個樣式 element對象.style.css樣式 // 設(shè)置多個css樣式 element對象.style.cssText = "樣式鍵值對;樣式鍵值對..."
注意:
-
style 對象,只能獲取行內(nèi)樣式(寫在一行中),不能獲取內(nèi)嵌的樣式(寫在 head 的 style 中)和外鏈的樣式(寫在css文件中)
-
style 是對象。typeof 的結(jié)果是 Object
-
值是字符串,沒有設(shè)置值是空字符串""
-
命名規(guī)則:駝峰命名
-
DOM 中的 style 對象并不等同 html 標簽中 style 屬性,在 JS 中,橫杠 - 是不能作為標識符的
比如:背景色樣式在 DOM 中是 backgroundColor,而在 CSS 中是 background-color
style 對象的常用屬性:backgroundColor(背景色)、backgroundImage(背景圖片)、color(顏色)、width(寬像素)、height(高像素)、border(邊框)、opacity(設(shè)置透明度,IE8 以前是 filter: alpha(opacity=xx))
-
-
通過 className 屬性
節(jié)點的 className 屬性對應(yīng)于 css 中的類選擇器
// 獲取或者修改class屬性值(樣式) element對象.className // 獲取class屬性值集合,返回一個classList對象(es6特別提供的操作元素class的接口) element對象.classList
element.classList 的常用方法:
add("class樣式名稱") // 添加一個class樣式 remove("class樣式名稱") // 移除一個class樣式 contains("class樣式名稱") // 判斷是否包含某一個樣式,包含返回true,不包含返回false toggle("class樣式名稱") // 切換一個class樣式。有則刪除,無則添加
-
添加事件:通過對象名.事件屬性名 給元素添加事件文章來源:http://www.zghlxwxcb.cn/news/detail-845873.html
-
示例:
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>dom操作樣式</title> </head> <body> <style> #p1{background-color: red} .mp{color:green} .mpp{background-color: lightgray;} </style> <p id="p1">1. 設(shè)置一個css樣式</p> <p id="p2">2. 批量設(shè)置css樣式</p> <p id="p3" class="mpp">3. 通過class設(shè)置樣式</p> <p id="p4">4. 切換class樣式</p> <input type="button" value="切換樣式" id="b1" /> <script > let p1 = document.querySelector("#p1"); //獲取段落標簽 let p2 = document.querySelector("#p2"); //獲取段落標簽 let p3 = document.querySelector("#p3"); //獲取段落標簽 let p4 = document.querySelector("#p4"); //獲取段落標簽 // 內(nèi)嵌式的樣式,通過style對象獲取不了 console.log("p1 backgroundColor: " + p1.style.backgroundColor); //"" // 給p1設(shè)置css樣式 // 白色字體 p1.style.color = "white"; // 黑色背景 p1.style.backgroundColor = "black"; // 獲取p1的樣式名 console.log(p1.style.backgroundColor); //black console.log(p1.style.color); //white // 隱藏不顯示 //p1.style.display = "none"; // 顯示 //p1.style.display = "block"; // 給p2批量設(shè)置css樣式 p2.style.cssText = "color: red;font-family: '楷體';border: 1px solid green"; // 給p3通過class設(shè)置樣式 // a.給元素添加class屬性的方式添加樣式 //p3.setAttribute("class","mp mpp"); // b.使用className屬性添加(兩種方式) //p3.className= "mp mpp"; p3.className = p3.className + " mp"; // mpp + " mp"==>mpp mp console.log("p3 className: " + p3.className);//mp mpp // 切換class樣式 // 獲取p4的class樣式集合 var p4List = p4.classList; // 添加一個class樣式 p4List.add("mpp"); // 判斷某一個樣式是否存在 console.log(p4List.contains("mpp")); //true console.log(p4List.contains("mp")); //false // 添加一個class樣式 p4List.add("mp"); console.log(p4List); // 移除一個class樣式 p4List.remove("mp"); // 獲取id是b1的按鈕 var b1Ele = document.querySelector("#b1"); // 通過對象名.事件屬性名,給元素添加事件 b1Ele.onclick = function () { //切換,無則添加,有則刪除 p4List.toggle("mp"); } </script> </body> </html>
到了這里,關(guān)于JavaScript 入門指南(三)BOM 對象和 DOM 對象的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!