JavaScript中DOM和BOM的區(qū)別與用處詳解
1. 概念與定義
- DOM (Document Object Model) : 文檔對象模型,它是一種標準的編程接口,表示 HTML 或 XML 文檔的結(jié)構(gòu),使得開發(fā)者可以通過 JavaScript 動態(tài)地訪問和操作文檔的內(nèi)容、結(jié)構(gòu)和樣式。DOM 將文檔表示為節(jié)點樹,其中每個節(jié)點都表示文檔的一部分,如元素、屬性、文本等。
- BOM (Browser Object Model) : 瀏覽器對象模型,它是指由瀏覽器提供的一組對象,用于與瀏覽器窗口進行交互。BOM 并不局限于操作文檔本身,而是可以操作瀏覽器的其他功能,如控制瀏覽器窗口、導航歷史、定位 URL 以及瀏覽器相關的信息等。
2. 區(qū)別
操作對象:
- DOM 操作的是文檔結(jié)構(gòu),包括元素節(jié)點、文本節(jié)點、屬性等。
- BOM 操作的是瀏覽器窗口及其周邊的功能,如導航、窗口大小、位置等。
標準性:
- DOM 是由 W3C 標準定義的,是跨瀏覽器的一致接口。
- BOM 不是一個正式的標準,各個瀏覽器的實現(xiàn)可能有所不同。
常用屬性和方法:
- DOM 常用方法有
getElementById
、querySelector
、appendChild
等,用于訪問和操作 HTML 元素。 - BOM 常用對象有
window
、navigator
、location
、history
等,用于與瀏覽器相關的操作。
- DOM 常用方法有
3. 用處舉例
DOM 的用處示例
- 動態(tài)修改頁面內(nèi)容:
// 獲取元素并修改其文本內(nèi)容和樣式 let header = document.querySelector('.header') header.textContent = '歡迎來到我的網(wǎng)站' header.style.color = 'blue' // 修改文本顏色 header.style.fontSize = '24px' // 修改字體大小 // 修改元素的屬性 let link = document.querySelector('a') link.setAttribute('href', 'https://www.newlink.com') // 修改鏈接地址 link.setAttribute('target', '_blank') // 在新窗口打開鏈接
- 創(chuàng)建和插入新元素:
// 創(chuàng)建新的列表項元素 let newItem = document.createElement('li') newItem.textContent = '新列表項' // 將新元素插入到現(xiàn)有的列表中 let list = document.getElementById('myList') list.appendChild(newItem) // 在指定位置插入元素 let anotherItem = document.createElement('li') anotherItem.textContent = '插入的新列表項' list.insertBefore(anotherItem, list.children[1]) // 在第二個子元素之前插入
- 監(jiān)聽用戶交互事件:
// 為按鈕添加點擊事件監(jiān)聽器 let button = document.getElementById("submitButton"); button.addEventListener("click", function() { alert("按鈕被點擊了!"); });
BOM 的用處示例
控制瀏覽器窗口:
// 打開一個新的窗口并設置一些窗口屬性 let newWindow = window.open('https://www.example.com', '_blank', 'width=800,height=600') // 移動窗口到屏幕指定位置 newWindow.moveTo(100, 100) // 調(diào)整窗口大小 newWindow.resizeTo(500, 500) // 關閉窗口 newWindow.close()
瀏覽器信息和導航:
javascript 復制代碼 // 獲取瀏覽器的用戶代理字符串 let userAgent = navigator.userAgent; console.log("用戶代理信息:", userAgent); // 檢測是否為移動設備 if (/Mobi|Android/i.test(userAgent)) { console.log("這是一個移動設備"); }
操作 URL 和導航:
javascript 復制代碼 // 獲取當前頁面的 URL let currentUrl = window.location.href; console.log("當前 URL:", currentUrl); // 重定向到新的頁面 window.location.;
瀏覽器信息和導航:
// 獲取瀏覽器用戶代理信息 let userAgent = navigator.userAgent console.log('用戶代理:', userAgent) // 檢測是否為某個瀏覽器 if (userAgent.indexOf('Chrome') > -1) { console.log('當前瀏覽器是 Chrome') } // 獲取當前頁面的 URL 信息 console.log('當前 URL:', window.location.href) console.log('協(xié)議:', window.location.protocol) console.log('主機名:', window.location.hostname) console.log('路徑名:', window.location.pathname) // 導航到新頁面 window.location. // 重載當前頁面 window.location.reload() // 瀏覽器歷史記錄操作 window.history.back() // 返回上一頁 window.history.forward() // 前進到下一頁
操作 localStorage
和 sessionStorag
// localStorage 持久存儲數(shù)據(jù)(頁面關閉后仍然存在) localStorage.setItem("username", "JohnDoe"); let username = localStorage.getItem("username"); console.log("用戶名:", username); // 移除存儲的數(shù)據(jù) localStorage.removeItem("username"); // sessionStorage 臨時存儲數(shù)據(jù)(頁面關閉后數(shù)據(jù)消失) sessionStorage.setItem("sessionID", "123456"); let sessionID = sessionStorage.getItem("sessionID"); console.log("會話 ID:", sessionID); // 清除所有 sessionStorage 數(shù)據(jù) sessionStorage.clear();
定時器與計時器
// 設置定時器,每隔一秒執(zhí)行一次 let count = 0; let intervalID = setInterval(() => { console.log(`計時器執(zhí)行次數(shù): ${count}`); count++; if (count === 5) { clearInterval(intervalID); // 停止定時器 } }, 1000); // 延時執(zhí)行函數(shù) setTimeout(() => { console.log("延時執(zhí)行的代碼"); }, 2000);
彈出對話框
// 提示框 alert("這是一個提示框!"); // 確認框 let confirmResult = confirm("你確定要刪除這條記錄嗎?"); if (confirmResult) { console.log("用戶點擊了確認"); } else { console.log("用戶點擊了取消"); } // 輸入框 let userInput = prompt("請輸入你的名字:", "匿名"); if (userInput !== null) { console.log(`你好,${userInput}`); }
4. 總結(jié)
- DOM 更關注文檔內(nèi)容的操作,適合用于創(chuàng)建動態(tài)內(nèi)容、用戶交互、表單驗證等場景。
- BOM 更側(cè)重于瀏覽器窗口和外部環(huán)境的交互,如頁面導航、窗口控制和瀏覽器信息獲取等。
在實際開發(fā)中,DOM 和 BOM 往往結(jié)合使用,以實現(xiàn)更加豐富和復雜的功能。理解它們的區(qū)別和各自的用處,可以幫助開發(fā)者更好地處理頁面和瀏覽器相關的任務。
以上就是JavaScript中DOM和BOM的區(qū)別與用處詳解的詳細內(nèi)容,更多關于JavaScript DOM和BOM區(qū)別及用處的資料請關注腳本之家其它相關文章!
相關文章
JS防抖節(jié)流函數(shù)的實現(xiàn)與使用場景
在行走江湖的過程中,會出現(xiàn)很多性能優(yōu)化的問題來讓你手足無措,那么這篇文章主要給大家介紹了關于JS防抖節(jié)流函數(shù)的實現(xiàn)與使用場景,針對這兩個問題來為你答疑解惑,需要的朋友可以參考下2021-07-07JS Array創(chuàng)建及concat()split()slice()的使用方法
下面小編就為大家?guī)硪黄狫S Array創(chuàng)建及concat()split()slice()的使用方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06Js得到radiobuttonlist選中值的兩種方法(推薦)
下面小編就為大家?guī)硪黄狫s得到radiobuttonlist選中值的兩種方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08