1. 程式人生 > 其它 >js學習 六、瀏覽器記錄

js學習 六、瀏覽器記錄

技術標籤:javaScript筆記jsjavascript

六、瀏覽器

6.1、瀏覽器物件

windows

充當全域性作用域,而且表示瀏覽器視窗。

window物件有innerWidthinnerHeight屬性,可以獲取瀏覽器視窗的內部寬度和高度。內部寬高是指除去選單欄、工具欄、邊框等佔位元素後,用於顯示網頁的淨寬高。

navigator

navigator物件表示瀏覽器的資訊,最常用的屬性包括:

  • navigator.appName:瀏覽器名稱;
  • navigator.appVersion:瀏覽器版本;
  • navigator.language:瀏覽器設定的語言;
  • navigator.platform:作業系統型別;
  • navigator.userAgent:瀏覽器設定的User-Agent字串。

不建議使用以上的屬性進行判斷和編寫程式碼 因為是使用者可以更改的

screen

screen物件表示螢幕的資訊,常用的屬性有:

  • screen.width:螢幕寬度,以畫素為單位;
  • screen.height:螢幕高度,以畫素為單位;
  • screen.colorDepth:返回顏色位數,如8、16、24。

location

location物件表示當前頁面的URL資訊。

location
http://localhost:63342/JavaScript/lesson01/one.html?_ijt=h4md6ke1rnp906690ha6hvbfjr#TOP
location.protocol "http:" location.host "localhost:63342" location.port "63342" location.pathname "/JavaScript/lesson01/one.html" location.search "?_ijt=h4md6ke1rnp906690ha6hvbfjr" location.hash "TOP" location.href "http://localhost:63342/JavaScript/lesson01/one.html?_ijt=h4md6ke1rnp906690ha6hvbfjr"
location.reload()//重新整理網頁 location.assign(跳轉的URL//跳轉網頁

document

document物件表示當前頁面。由於HTML在瀏覽器中以DOM形式表示為樹形結構,document物件就是整個DOM樹的根節點。

documenttitle屬性是從HTML文件中的<title>xxx</title>讀取的,但是可以動態改變:

document物件還有一個cookie屬性,可以獲取當前頁面的Cookie。

Cookie是由伺服器傳送的key-value標示符。因為HTTP協議是無狀態的,但是伺服器要區分到底是哪個使用者發過來的請求,就可以用Cookie來區分。當一個使用者成功登入後,伺服器傳送一個Cookie給瀏覽器,例如user=ABC123XYZ(加密的字串)...,此後,瀏覽器訪問該網站時,會在請求頭附上這個Cookie,伺服器根據Cookie即可區分出使用者。

history

history物件儲存了瀏覽器的歷史記錄,JavaScript可以呼叫history物件的back()forward (),相當於使用者點選了瀏覽器的“後退”或“前進”按鈕。

任何情況,你都不應該使用history這個物件了。

6.2、操作BOM物件

BOM:瀏覽器物件模型

始終記住DOM是一個樹形結構。操作一個DOM節點實際上就是這麼幾個操作:

  • 更新:更新該DOM節點的內容,相當於更新了該DOM節點表示的HTML的內容;
  • 遍歷:遍歷該DOM節點下的子節點,以便進行進一步操作;
  • 新增:在該DOM節點下新增一個子節點,相當於動態增加了一個HTML節點;
  • 刪除:將該節點從HTML中刪除,相當於刪掉了該DOM節點的內容以及它包含的所有子節點。

要操作一個DOM節點,就必須先獲得者DOM節點

由於ID在HTML文件中是唯一的,所以document.getElementById()可以直接定位唯一的一個DOM節點。document.getElementsByTagName()document.getElementsByClassName()總是返回一組DOM節點。要精確地選擇DOM,可以先定位父節點,再從父節點開始選擇,以縮小範圍。

var ID = document.getElementById('要選擇的ID');

// 先定位ID為'test-table'的節點,再返回其內部所有tr節點:
var trs = document.getElementById('test-table').getElementsByTagName('tr');

// 先定位ID為'test-div'的節點,再返回其內部所有class包含red的節點:
var reds = document.getElementById('test-div').getElementsByClassName('red');

// 獲取節點test下的所有直屬子節點:
var cs = test.children;

// 獲取節點test下第一個、最後一個子節點:
var first = test.firstElementChild;
var last = test.lastElementChild;

更新節點

可以直接修改節點的文字,方法有兩種

  • 一種是修改innerTexttextContent屬性,這樣可以自動對字串進行HTML編碼,保證無法設定任何HTML標籤:
  • 兩者的區別在於讀取屬性時,innerText不返回隱藏元素的文字,而textContent返回所有文字。
elementById.innerText= "124";
  • 一種是修改innerHTML屬性,這個方式非常強大,不但可以修改一個DOM節點的文字內容,還可以直接通過HTML片段修改DOM節點內部的子樹:
elementById.innerHTML = '<strong>123</strong>';

修改CSS也是經常需要的操作。DOM節點的style屬性對應所有的CSS,可以直接獲取或設定。因為CSS允許font-size這樣的名稱,但它並非JavaScript有效的屬性名,所以需要在JavaScript中改寫為駝峰式命名fontSize、屬性使用字串:

elementById.style.color = "red";
elementById.style.fontSize = '20px'

刪除節點

刪除節點的步驟:先獲取父節點,呼叫父節點的removeChild把自己刪掉:

<div id="id1">
    <p id="p1">as</p>
</div>
<script>
    'use strict'
   var elementById = document.getElementById("id1");
 	 var father = p1.parentElement;
    father.removeChild(p1);

</script>

注意到刪除後的節點雖然不在文件樹中了,但其實它還在記憶體中,可以隨時再次被新增到別的位置。

<div id="father">
    <p>1</p>
    <p>2</p>
</div>
var father = document.getElementById('father');
parent.removeChild(father.children[0]);
parent.removeChild(father.children[1]); //  瀏覽器報錯

瀏覽器報錯:father.children[1]不是一個有效的節點。原因就在於,當

1

節點被刪除後,father.children 的節點數量已經從2變為了1,索引[1]`已經不存在了。

因此,刪除多個節點時,要注意children屬性時刻都在變化。

插入節點

如果這個DOM節點是空的,例如,<div></div>,那麼,直接使用innerHTML = '<span>child</span>'就可以修改DOM節點的內容,相當於“插入”了新的DOM節點。

如果這個DOM節點不是空的,那就不能這麼做,因為innerHTML會直接替換掉原來的所有子節點。

有兩個辦法可以插入新的節點。一個是使用appendChild,把一個子節點新增到父節點的最後一個子節點。例如:

<!-- HTML結構 -->
<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>
    'use strict'
        var js = document.getElementById('js');
        var list = document.getElementById('list');
    list.appendChild(js)
</script>

在這裡插入圖片描述

建立標籤

從零建立一個新的節點,然後插入到指定位置:

var newp = document.createElement('p');
newp.id = 'newp';
newp.innerText = "newp";
list.appendChild(newp);

在這裡插入圖片描述

var myscript = document.createElement('script');
myscript.setAttribute("type", "text/javascript");
list.appendChild(myscript);

在這裡插入圖片描述

insertBefore

如果我們要把子節點插入到指定的位置怎麼辦?可以使用parentElement.insertBefore(newElement, referenceElement);,子節點會插入到referenceElement之前。