前端開發之 JavaScript 的 BOM 和 DOM 操作

一、BOM操作
瀏覽器對象模型 Browser Object Model
js代碼操作 瀏覽器
1、window對象
# window對象
window對象指代的就是瀏覽器窗口

window.innerHeight  瀏覽器窗口的高度
900
window.innerWidth   瀏覽器窗口的寬度
1680

# 新建窗口打開頁面 第二個參數寫空即可 第三個參數寫新建的窗口的大小和位置
window.open(url,target,features)
eg:window.open('https://www.baidu.com/','','height=400px,width=400px,top=400px,left=400px')

# 擴展父子頁面通信 window.opener()  瞭解

window.close()  關閉當前頁面
2、window子對象
window.navigator.appName
"Netscape"


window.navigator.appVersion
"5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"

window.navigator.userAgent      # 用來表示當前是否是一個瀏覽器
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"



"""

擴展:防爬措施
1.最簡單最常用的一個就是 校驗當前請求的發起者是否是一個瀏覽器

(有以下配置信息,說明是瀏覽器)
userAgent
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36

2、如何破解該措施
在你的代碼中加上上面的user-agent配置即可
"""

window.navigator.platform
"MacIntel"

# 如果是window的子對象 那麼window可以省略不寫

3、history對象
window.history.back()  回退到上一頁
window.history.forward()  前進到下一頁
# 對應的就是你使用的瀏覽器左上方的兩個的箭頭
4、location對象(掌握)
window.location.href   # 獲取當前頁面的url
window.location.href = url   # 跳轉到指定的url
window.location.reload()   # 屬性頁面 瀏覽器左上方的小圓圈
5、彈出框
警告框
alert('請謹慎訪問此網站')

確認框
confirm('你確定加入遊戲嗎?')
false
confirm('你確定進入下一輪遊戲嗎?')
true



提示框
prompt('歡迎光臨','請先登入')
"歡迎加入"  




6、計時器相關
1、過一段時間之後觸發(一次)
setTimeout(func1,3000)
clearTimeout(t)
2、每隔一段時間觸發一次(循環)
setInterval(func2,3000)
clearInterval(t)
複製代碼
<script>

// 1、過一段時間之後觸發(一次)
    function func1() {
        alert(123)
    }
    let t = setTimeout(func1,3000);  
    // 毫秒爲單位 3秒之後自動執行func1函數

    clearTimeout(t)      // 取消定時任務  如果你想要清除定時任務 需要日前用變量指代定時任務



//2、每隔一段時間觸發一次(循環)
    function func2() {
        alert(123)
    }
    function show(){
        let t = setInterval(func2,3000);  // 每隔3秒執行一次
        function inner(){
            clearInterval(t)  // 清除定時器
        }
        setTimeout(inner,9000)  // 9秒中之後觸發
    }
    show()
</script>
複製代碼


二、DOM操作
文檔對象模型 Document Object Model
js代碼操作 標籤
1、DOM相關概念
# DOM樹的概念
所有的標籤都可以稱之爲是節點
# JavaScript 可以通過DOM創建動態的 HTML:
JavaScript 能夠改變頁面中的所有 HTML 元素
JavaScript 能夠改變頁面中的所有 HTML 屬性
JavaScript 能夠改變頁面中的所有 CSS 樣式
JavaScript 能夠對頁面中的所有事件做出反應
# DOM操作
操作的是標籤 而一個html頁面上的標籤有很多
1.先學如何查找標籤
2.再學DOM操作標籤

# DOM操作需要用關鍵字 document 起首
2、查找標籤
(1)直接查找
複製代碼
"""
id查找
類查找
標籤查找
"""
# 注意三個方法的返回值是不一樣的
document.getElementById('d1')
<div id=​"d1">​…​</div>​

document.getElementsByClassName('c1')
HTMLCollection [p.c1]0: p.c1length: 1__proto__: HTMLCollection

document.getElementsByTagName('div')
HTMLCollection(3) [div#d1, div, div, d1: div#d1]


let divEle = document.getElementsByTagName('div')[1]
divEle
<div>​ div>div​ </div>​

"""
當你用變量名指代標籤對象的時候 一般情況下都推薦你書寫成
xxxEle
divEle
aEle
pEle
"""
複製代碼


(2)間接查找
複製代碼
let pEle = document.getElementsByClassName('c1')[0]  # 注意是否需要索引取值

pEle.parentElement  # 拿父節點
<div id=​"d1">​"div
    "<div>​div>div​</div>​<p class=​"c1">​…​</p>​<p>​div>p​</p>​</div>​

pEle.parentElement.parentElement
<body>​…​</body>​

pEle.parentElement.parentElement.parentElement
<html lang=​"en">​<head>​…​</head>​<body>​…​</body>​</html>​

pEle.parentElement.parentElement.parentElement.parentElement
null

let divEle = document.getElementById('d1')
divEle.children  # 獲取所有的子標籤
divEle.children[0]
<div>​div>div​</div>​

divEle.firstElementChild
<div>​div>div​</div>​

divEle.lastElementChild
<p>​div>p​</p>​

divEle.nextElementSibling  # 同級別下面第一個
<div>​div下面div​</div>​

divEle.previousElementSibling  # 同級別上面第一個
<div>​div上面的div​</div>​
複製代碼


3、節點操作
(1)
複製代碼
"""
通過DOM操作動態的創建img標籤
並且給標籤加屬性
最後將標籤添加到文本中
"""
let imgEle = document.createElement('img')  # 創建標籤

imgEle.src = '111.png'  # 給標籤設置默認的屬性
"111.png"
imgEle

imgEle.username = 'jason'  # 自定義的屬性沒辦法點的方式直接設置
"jason"
imgEle
<img src=​"111.png">​


imgEle.setAttribute('username','jason')   # 既可以設置自定義的屬性也可以設置默認的書寫
undefined
imgEle
<img src=​"111.png" username=​"jason">​
imgEle.setAttribute('title','一張圖片')
imgEle
<img src=​"111.png" username=​"jason" title=​"一張圖片">​

let divEle = document.getElementById('d1')
undefined
divEle.appendChild(imgEle)  # 標籤內部添加元素(尾部追加)
<img src=​"111.png" username=​"jason" title=​"一張圖片">​
複製代碼
(2)

複製代碼
"""
創建a標籤
設置屬性
設置文本
添加到標籤內部
    添加到指定的標籤的上面
"""
let aEle = document.createElement('a')

aEle
<a>​</a>​
aEle.href = 'https://www.mzitu.com/'
"https://www.mzitu.com/"
aEle
<a href=​"https:​/​/​www.mzitu.com/​">​</a>​

aEle.innerText = '點我有你好看!'  # 給標籤設置文本內容
"點我有你好看!"
aEle
<a href=​"https:​/​/​www.mzitu.com/​">​點我有你好看!​</a>​
let divEle = document.getElementById('d1')
undefined
let pEle = document.getElementById('d2')
undefined
divEle.insertBefore(aEle,pEle)  # 添加標籤內容指定位置添加
<a href=​"https:​/​/​www.mzitu.com/​">​點我有你好看!​</a>​
複製代碼
(3)

複製代碼
"""
額外補充
    appendChild()
        removeChild()
        replaceChild()


    setAttribute()  設置屬性
        getAttribute()  獲取屬性
        removeAttribute()  移除屬性
"""

# innerText與innerHTML
divEle.innerText  # 獲取標籤內部所有的文本
"div 點我有你好看!
div>p
div>span"

divEle.innerHTML  # 內部文本和標籤都拿到
"div
        <a href="https://www.mzitu.com/">點我有你好看!</a><p id="d2">div&gt;p</p>
        <span>div&gt;span</span>
    "

divEle.innerText = 'heiheihei'
"heiheihei"
divEle.innerHTML = 'hahahaha'
"hahahaha"

divEle.innerText = '<h1>heiheihei</h1>'  # 不識別html標籤
"<h1>heiheihei</h1>"
divEle.innerHTML = '<h1>hahahaha</h1>'  # 識別html標籤
"<h1>hahahaha</h1>"
複製代碼


4、獲取值操作
複製代碼
# 獲取用戶數據標籤內部的數據
let seEle = document.getElementById('d2')
seEle.value
"111"
seEle.value
"333"

let inputEle = document.getElementById('d1')
inputEle.value
複製代碼
複製代碼
# 如何獲取用戶上傳的文件數據
let fileEle = document.getElementById('d3')
fileEle.value  # 無法獲取到文件數據
"C:\fakepath\02_測試路由.png"

fileEle.files
FileList {0: File, length: 1}0: File {name: "02_測試路由.png", lastModified: 1557043082000,
lastModifiedDate: Sun May 05 2019 15:58:02 GMT+0800 (中國標準時間),
webkitRelativePath: "", size: 29580, …}length: 1__proto__: FileList

fileEle.files[0]  # 獲取文件數據
File {name: "02_測試路由.png", lastModified: 1557043082000,
lastModifiedDate: Sun May 05 2019 15:58:02 GMT+0800 (中國標準時間), webkitRelativePath: "", size: 29580, …}
複製代碼


5、class、css操作  
複製代碼
let divEle = document.getElementById('d1')
undefined
divEle.classList  # 獲取標籤所有的類屬性
DOMTokenList(3) ["c1", "bg_red", "bg_green", value: "c1 bg_red bg_green"]


divEle.classList.remove('bg_red')  # 移除某個類屬性
undefined

divEle.classList.add('bg_red')  # 添加類屬性
undefined
divEle.classList.contains('c1')  # 驗證是否包含某個類屬性
true
divEle.classList.contains('c2')
false

divEle.classList.toggle('bg_red')  # 有則刪除無則添加
false
divEle.classList.toggle('bg_red')
true
divEle.classList.toggle('bg_red')
false
divEle.classList.toggle('bg_red')
true
divEle.classList.toggle('bg_red')
false
divEle.classList.toggle('bg_red')
true



# DOM操作操作標籤樣式 統一先用style起首
let pEle = document.getElementsByTagName('p')[0]
undefined
pEle.style.color = 'red'
"red"
pEle.style.fontSize = '28px'
"28px"
pEle.style.backgroundColor = 'yellow'
"yellow"
pEle.style.border = '3px solid red'
"3px solid red"
複製代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章