1. 程式人生 > 其它 >BOM操作、DOM操作、jQuery類庫

BOM操作、DOM操作、jQuery類庫

BOM操作、DOM操作、jQuery類庫

一、BOM操作

BOM(Browser Object Model)是指瀏覽器物件模型,它使JavaScript有能力與瀏覽器進行對話

1.window物件

瀏覽器相關配置
1.window.open('https://www.sogo.com/','','width=1000px,left=200px')
  開啟新視窗,window.open('url地址','開啟方式(可以為空)','視窗的大小')
2.window.innerWidth        # 瀏覽器視窗的內部寬度
3.window.innerWidth        # 瀏覽器視窗的內部高度
4.window.close()           # 關閉當前視窗

2.navigator物件

判定使用者使用的瀏覽器,包含了瀏覽器相關資訊
1.navigator.appName           # web瀏覽器的全稱
'Netscape'
2.navigator.appVersion        # web瀏覽器廠商和版本的詳細字串
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
3.navigator.userAgent         # 客戶端絕大部分資訊
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
4.navigator.platform          # 瀏覽器所在的作業系統
'Win32'

3.history物件

瀏覽歷史物件
1.history.forward             # 向前一頁
ƒ forward() { [native code] }
2.history.back                # 向後一頁
ƒ back() { [native code] }

4.location物件

window.location用於獲得當前頁面的地址(url),並把瀏覽器重定向到新的頁面
1.window.location.href         # 獲取url
'https://www.sogou.com/'
2.window.location.href='https://www.sogo.com/'    # 跳轉到指定的頁面
3.window.location.reload()      # 重新載入頁面

5.彈出框

1.警告框,確保使用者可以得到一些資訊
window.alert('有沒有好好學習')
undefined
2.確認框,當確認框出現後,使用者需要點選確定或者取消按鈕才能繼續進行操作。
window.confirm('(*❦ω❦)確定嗎?')
true
3.提示框,使用者需要輸入某個值,然後點選確認或者取消按鈕才能繼續操作
 window.prompt('請輸入你今天想要做的事情')
'學習,學習,學習,學習,學習,學習,沒有了'

6.計時相關操作

通過js我們可以在一定時間間隔之後來執行程式碼,而不是在函式被呼叫後立即執行,我們稱之為計時事件
1.setTimeout()       # 只執行一次 
function showMsg() {
        alert('好好學習哦')
    }
let t = setTimeout(showMsg,3000)    # 多少毫秒起執行第一個引數
2.clearTimeout()      #  清除定時器
clearTimeout(t)
3.setInterval()         #  無限次執行
4.clearInterval()       #  清除定時器
clearInterval() 方法可取消由 setInterval() 設定的 timeout。
clearInterval() 方法的引數必須是由 setInterval() 返回的 ID 值。
let s;
function func() {
    alert('好好學習')
}
s = setInterval(func,3000)


function inner() {
    clearInterval(s)

}
setInterval(inner,2000)

二、DOM操作

1.DOM操作簡介

DOM(Document Object Model) 是指文件物件模型,通過它可以訪問HTML文件的所有元素
DOM操作是通過js程式碼來操作標籤 我們需要先學習如何查詢標籤之後才能給標籤繫結一些JS程式碼(DOM操作)

2.查詢標籤

html程式碼:
<body>
    <span>span</span>
    <span>span</span>
    <div id="d1">div
        <span>div>span</span>
        <p class="c1">div>p
            <span>div>p>span</span>
        </p>
        <span>div>span</span>
    </div>
    <span>span</span>
    <span>span</span>
</body>
直接查詢:
1.document.getElementById('d1')   # 獲取標籤物件本身
<div id=​"d1">​…​</div>​
2.document.getElementsByClassName('c1')    # 結果是數組裡面含有多個標籤物件
HTMLCollection [p.c1]
3.document.getElementsByTagName('span')   # 結果是數組裡面含有多個標籤物件
HTMLCollection(7) [span, span, span, span, span, span, span]
間接查詢:
1.parentElement        父節點標籤元素
2.children             所有子標籤
3.firstElementChild     第一個子標籤元素
4.lastElementChild      最後一個子標籤元素
5.nextElementSibling     下一個兄弟標籤元素
6.previousElementSibling     上一個兄弟標籤元素

3.操作節點

js程式碼查詢到的標籤如果需要反覆使用可以用變數接收 規律 xxxEle
1.建立節點
let aEle = document.createElement('div')
2.新增節點
var imgEle = document.createElement('img')
undefined
imgEle.setAttribute("src","1.png")
var d1Ele = document.getElementById('d1')
d1Ele.appendChild(imgEle)     # 新增節點
3.js程式碼操作標籤屬性
let a1Ele = document.createElement('a')
a1Ele.href = 'https://www.sogo.com/'
a1Ele.setAttribute("age",18)
undefined
a1Ele.getAttribute("age")
'18'
4.刪除節點
a1Ele.removeAttribute("age")
undefined
5.js程式碼操作標籤文字
a1Ele.innerText="好好學習"
'好好學習'
6.js程式碼查詢div標籤並將a追加到div內部
let divEle = document.getElementsByTagName('div')[0]
divEle.appendChild(a1Ele)
文字節點的操作方法:
.innerText            # 獲取標籤內部所有文字內容
.innerText = '文字'    #  替換標籤內部的文字
.innerHTML             # 獲取標籤內部所有的標籤包含文字
.innerHTML = '內容'    # 獲取標籤內部所有的標籤包含內容

4.獲取值操作

1.針對使用者輸入的和使用者選擇的標籤
語法:標籤物件.value
適用於input,select,textarea
2.針對使用者上傳的檔案資料
標籤物件.files     fileList  [檔案物件,檔案物件,檔案物件]
標籤物件.files[0]  檔案物件
html程式碼:
 <form action="">
      <p>
        username:
        <input type="text" id="d1">
      </p>
      <p>
        choice:
        <select name="" id="pro">
          <option value="乾飯">63336</option>
          <option value="學習">64444</option>
          <option value="好好學習">66655</option>
        </select>
      </p>
      <p>
        file:
        <input type="file" id="file">
      </p>

    </form>

5.類屬性操作

1.獲取當前標籤所有類的值
標籤物件.classList
2.判斷當前標籤是否有這個屬性
標籤物件.classList.contains()    # 存在返回true,否則返回false
3.給當前標籤新增一個類值
標籤物件.classList.add()
4.刪除當前標籤指定類的屬性
標籤物件.classList.remove()
5.存在就刪除,否則新增
標籤物件.classList.toggle()

6.樣式操作

標籤物件.style.backgroundColor = 'red'  # 將標籤的背景色設定為紅色
js操作css屬性的規律
1.對於沒有橫線的css屬性一般使用style.屬性名就好了
obj.style.margin
obj.style.width
obj.style.left
obj.style.postion
2.對含有中橫線的CSS屬性,將中橫線後面的第一個字母換成大寫即可
obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily

三、事件

HTML 4.0 的新特性之一是有能力使 HTML 事件觸發瀏覽器中的動作(action),比如當用戶點選某個 HTML 元素時啟動一段 JavaScript。下面是一個屬性列表,這些屬性可插入 HTML 標籤來定義事件動作。
事件簡單來說就是給html綁定了一些額外的功能,能夠觸發js程式碼的執行

1.常用事件

onclick       # 當用戶點選某個物件時呼叫事件
ondblclick    # 當用戶雙擊某個物件時呼叫的事件

onfocus       # 元素獲取焦點
onblur        # 元素失去焦點    應用場景:用於表單驗證,使用者離開某個輸入框時,代表已經輸入完了,我們可以對它進行驗證.
onchange       # 域的內容被改變  應用場景:通常用於表單元素,當元素內容被改變時觸發.(select聯動)

onkeydown      # 某個鍵盤的鍵被按下
onkeypress     # 某個鍵盤按鍵被按下並鬆開。
onkeyup        # 某個鍵盤按鍵被鬆開。
onload         # 頁面載入完成
onmousedown    # 滑鼠按鈕被按下
onmousemove    # 滑鼠按鈕被移動
onmouseout     # 滑鼠從某元素移開
onmouseover    # 滑鼠移到某元素之上

onselect       # 在文字框被選中時發生
onsubmit       # 確認按鈕被點選,使用的物件是form。

2.繫結事件的兩種方式

<input type="button" value="點我" onclick="func()">
     <button id="d1">點一哈</button>
<script>
  //繫結事件的方法1:提前寫好函式,標籤內部指定函式呼叫,設定點選屬性
  function func(){
    alert('點到了')
  }

  //繫結事件的方法2:先查詢標籤,然後批量繫結
  let btnEle = document.getElementById('d1')
  btnEle.onclick = function () {
    alert('又點到了')
  }
</script>

3.事件中的關鍵字this

<input type="button" value="點我" onclick="func()">
 <button id="d1">點一哈</button>
<script>
  //繫結事件的方法1:提前寫好函式,標籤內部指定函式呼叫,設定點選屬性
  function func(){
    alert('點到了')
    console.log(this)
  }
  //this 是當前操作的document文件

  //繫結事件的方法2:先查詢標籤,然後批量繫結
  let btnEle = document.getElementById('d1')
  btnEle.onclick = function () {
    alert('又點到了')
    console.log(this)
  }
搜尋框例項:
 <input type="text" value="要點嗎" id="d1">
<script>
        let inputEle = document.getElementById('d1')
        inputEle.onfocus = function () {
            this.value = ''
        }
        inputEle.onblur = function () {
            this.value = '歡迎下次再來'
        }
    </script>

4.window.onload

當我們給頁面上的元素繫結事件的時候,必須等到文件載入完畢。因為我們無法給一個不存在的元素繫結事件。

window.onload事件在檔案載入過程結束的時候觸發。此時,文件中的所有物件都位於DOM中,並且所有影象,指令碼,連結和子框架都已完成載入。

注意:.onload()函式存在覆蓋現象。
<script>
   window.onload = function(){
       頁面js程式碼
   }
</script>

5.js之校驗使用者資料

<p>username:
    <input type="text" id="d1">
    <span style="color: lightblue"></span>
</p>
<p>password:
    <input type="text" id="d2">
    <span style="color: lightblue"></span>
</p>
<button id="suBtn">提交</button>
<script>
    //查詢按鈕標籤
    let btnEle = document.getElementById('suBtn')
    //繫結單擊事件
    btnEle.onclick = function () {
        let userNameEle = document.getElementById('d1')
        let passWordEle = document.getElementById('d2')
        if(userNameEle.value === 'jason'){
            userNameEle.nextElementSibling.innerText = '使用者名稱不能為jason'
        }
        if(passWordEle.value === '123'){
            passWordEle.nextElementSibling.innerText = '密碼不能為123'
        }
    }
</script>

6.JS事件之省市聯動

<body>
省:
<select name="" id="d1">
</select>
市:
<select name="" id="d2">
</select>
<script>
    let data = {
        '浙江': ['金華', '杭州'],
        '上海': ['浦東', '青浦'],
        '海南': ['三亞', '海口'],
        '四川': ['成都', '德陽'],
        '安徽': ['池州', '合肥']
    }
    let proEle  = document.getElementById('d1');
    let cityEle  = document.getElementById('d2');
    //獲取所有省的資訊
    for (let pro in data){
        //建立option
        let proOpEle = document.createElement('option');
        //新增文字及屬性
        proOpEle.innerText = pro;
        proOpEle.setAttribute('value',pro);
        // 4.將建立好的option標籤新增到省下拉框中
        proEle.appendChild(proOpEle)
    }
    // 5.給省標籤繫結文字域變化事件 onchange
    proEle.onchange = function () {
        //每次操作之前先清空之前的
        cityEle.innerHTML = '';
        let targetProData = this.value;
        let cityDataList = data[targetProData]
        // 7.迴圈獲取每一個市資訊 建立option標籤 新增到市下拉框中
        for(let i=0;i<cityDataList.length;i++){
            let cityOpEle = document.createElement('option')
            cityOpEle.innerText = cityDataList[i]
            cityOpEle.setAttribute('value',cityDataList[i])
            cityEle.appendChild(cityOpEle)
        }
    }
</script>
</body>

四、jQuery

1.jQuery

jQuery是一個輕量級的、相容多瀏覽器的java庫
jQuery使使用者能夠更方便地處理HTML Document、Events、實現動畫效果、方便地進行Ajax互動,能夠極大簡化JavaScript程式設計。

2.jQuery的優勢

1.一款輕量級的JS框架。jQuery核心js檔案才幾十kb,不會影響頁面載入速度。
2.豐富的DOM選擇器,jQuery的選擇器用起來很方便,比如要找到某個DOM物件的相鄰元素,JS可能要寫好幾行程式碼,而jQuery一行程式碼就搞定了,再比如要將一個表格的隔行變色,jQuery也是一行程式碼搞定。
3.鏈式表示式。jQuery的鏈式操作可以把多個操作寫在一行程式碼裡,更加簡潔。
4.事件、樣式、動畫支援。jQuery還簡化了js操作css的程式碼,並且程式碼的可讀性也比js要強。
5.Ajax操作支援。jQuery簡化了AJAX操作,後端只需返回一個JSON格式的字串就能完成與前端的通訊。
6.跨瀏覽器相容。jQuery基本相容了現在主流的瀏覽器,不用再為瀏覽器的相容問題而傷透腦筋。
7.外掛擴充套件開發。jQuery有著豐富的第三方的外掛,例如:樹形選單、日期控制元件、圖片切換外掛、彈出視窗等等基本前端頁面上的元件都有對應外掛,並且用jQuery外掛做出來的效果很炫,並且可以根據自己需要去改寫和封裝外掛,簡單實用。

3.類庫的匯入

1.CDN加速服務(在head內的script中加入)
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>

2.jQuery官網下載後本地匯入
<script src="jquery.js"></script>

注意:使用jQuery必須要先匯入,本質就是js檔案

"""
jQuery()  >>>  $()
"""