BOM和DOM

此筆記是我在拉勾學(xué)習(xí)課程過(guò)程中的總結(jié),文字原創(chuàng),筆記里很多技巧和知識(shí)是老師總結(jié)的拳球,如果有侵權(quán),請(qǐng)聯(lián)系本人珍特!

一些基本概念

1.API:

API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù)醇坝,目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源碼次坡,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)呼猪。

2.瀏覽器提供的一套瀏覽器功能和頁(yè)面元素的api(BOM和DOM)

3.一些學(xué)習(xí)資料:

MDN:https://developer.mozilla.org/zh-CN/docs/Web/API

一、DOM

1.Document Object Model砸琅,可以把一個(gè)HTML網(wǎng)頁(yè)看做文檔樹宋距,通過(guò)DOM提供的API對(duì)節(jié)點(diǎn)進(jìn)行操作。

2.DOM樹

DOM樹包含的節(jié)點(diǎn)類型:
(標(biāo)簽症脂、屬性谚赎、文本、注釋等)

  • 元素:網(wǎng)頁(yè)中的標(biāo)簽
  • 屬性:標(biāo)簽的屬性

3.獲取頁(yè)面元素:

  • 根據(jù)id獲取元素(id具有唯一性)
    方法:調(diào)用document對(duì)象的getElementById方法
    參數(shù):字符串類型的id的屬性值
    返回值:對(duì)應(yīng)id的元素對(duì)象
// 獲取頁(yè)面中id值為box的元素
var box = document.getElementById('box');
  • 根據(jù)標(biāo)簽名獲取元素
    getElementsByTagName

返回值诱篷,同名元素對(duì)象組成的偽數(shù)組 htmlcollection
操作時(shí)按數(shù)組方法操作壶唤,且元素動(dòng)態(tài)增加

// 提前獲取元素
var divs = document.getElementsByTagName("div");

  • 元素對(duì)象內(nèi)部獲取元素

獲取元素對(duì)象內(nèi)部,本身也可以調(diào)用根據(jù)標(biāo)簽獲取元素方法棕所,類似于css后代選擇器

//   元素對(duì)象內(nèi)部可以繼續(xù)打點(diǎn)調(diào)用通過(guò)標(biāo)簽名獲取元素的方法
// 類似于css中 后代選擇器闸盔,縮小選擇范圍
var  box1 = document.getElementById("box1");
var ps1 = box1.getElementsByTagName("p");

  • 根據(jù)name屬性獲取元素(只做了解,不建議使用)

選中的元素也是動(dòng)態(tài)變化的

// 獲取元素中name屬性值為age的元素
// 節(jié)點(diǎn)列表集合 NodeList
var ages = document.getElementsByName('age');
 // 兼容問(wèn)題:在ie和Opera中使用琳省,會(huì)多選中id屬性值相同的元素
 // 方法選中元素是動(dòng)態(tài)變化的

  • 根據(jù)類名(class)獲取元素
    getElementsByClassName
    返回class屬性值相同元素對(duì)象組成的偽數(shù)組 htmlcollection
    也可以動(dòng)態(tài)添加
    不兼容IE8及以下瀏覽器
// 獲取頁(yè)面中所有類名為.box的元素
var box = document.getElementsByClassName('box');
  • 根據(jù)選擇器獲取元素
    1:通過(guò)document的querySelector方法迎吵,通過(guò)css中選擇器去選擇第一個(gè)符合條件的標(biāo)簽
    2:調(diào)用querySelectorAll ,通過(guò)css中的選擇器選取所有符合條件的標(biāo)簽元素针贬,返回值是 nodelist
    參數(shù):字符串---css中的選擇題
 // 在結(jié)構(gòu)之后使用 選擇器 選取方法,選中第一個(gè)
 var para = document.querySelector("#box1 .para"); 
 // 選擇所有符合條件的元素
 var paras = document.querySelectorAll("#box1 .para");
 // 得到一個(gè) nodelist        
// 兼容問(wèn)題:ie8 以下不兼容

4.DOM事件與綁定

-執(zhí)行機(jī)制:觸發(fā)—響應(yīng)機(jī)制

  • 綁定事件三要素:

    • 事件源:綁定給誰(shuí)
    • 事件類型:綁定干什么類型事件 click击费,hover
    • 事件函數(shù):事件發(fā)生后執(zhí)行什么內(nèi)容,寫在函數(shù)內(nèi)部
  • 常用的鼠標(biāo)事件類型:

    事件 說(shuō)明
    Onclick 鼠標(biāo)左鍵單擊
    Ondblclick 鼠標(biāo)左鍵雙擊
    Onmousedown 鼠標(biāo)按下觸發(fā)
    Onmouseup 鼠標(biāo)按鍵放開觸發(fā)
    Onmousemove 鼠標(biāo)在元素上移動(dòng)
    Onmouseover 鼠標(biāo)在元素上觸發(fā)
    Onmouseout 鼠標(biāo)移出元素邊界
  • 常用的事件監(jiān)聽方法

    • html綁定
    <input type="button" id="btn" value="點(diǎn)擊" onclick="alert('點(diǎn)我做什么桦他?')">
    
  • 綁定dom對(duì)象

    <!-- <input type="button" id="btn" value="點(diǎn)擊" onclick="alert('點(diǎn)我做什么蔫巩?')"> -->
      <input type="button" id="btn" value="點(diǎn)擊">
      <script>
          var btn = document.getElementById("btn");
          btn.onclick = function () {
              alert("我做什么?");
          }
    

5.綁定事件的其他方法

此處為了和DOM0級(jí)事件的綁定方法綜合學(xué)習(xí)

5.1 DOM 0級(jí)事件綁定

  • on方法快压,即上述方法圆仔,采用onclick onmouseover等,只能每次綁定一個(gè)事件嗓节,如多次綁定荧缘,則先綁定的會(huì)被后面的層疊

5.2 DOM 2級(jí)事件綁定

  • Element.addEventListener()方法
    參數(shù):
    • 第一個(gè):事件類型字符串(需要on)
    • 第二個(gè):事件函數(shù)
      同一個(gè)元素可以多次綁定監(jiān)聽,同一類型可以注冊(cè)多個(gè)事件函數(shù)
      不兼容ie9以下
<input type="button" value="點(diǎn)擊" id="btn">
    <script>
        var btn = document.getElementById("btn");
         // DOM0 級(jí)事件
        // 綁定事件的方式
        // btn.onclick = function () {
        //   alert(1);
        // };
        // 綁定多次相同的事件
        // btn.onclick = function () {
        //   alert(2);
        // };

        // DOM 2 級(jí)事件綁定方式
        btn.addEventListener("click",function () {
            alert(1);
        });
        // 多次綁定個(gè)相同的事件類型拦宣,事件會(huì)根據(jù)書寫的順序進(jìn)行一個(gè)事件排隊(duì)
        btn.addEventListener("click",function () {
            alert(2);
        });
        // 此處clickevent是作為參數(shù)傳進(jìn)來(lái)截粗,不可以加括號(hào),否則就直接調(diào)用了
        btn.addEventListener("click",clickEvent);
        function clickEvent () {
            alert(3);
        }
    </script>

  • element.attachEvent() 方法
    參數(shù):
    • 第一個(gè):事件類型字符串(需要on)
    • 第二個(gè):事件函數(shù)
      同一元素可以多次綁定監(jiān)聽鸵隧,同一個(gè)事件類型可以注冊(cè)多個(gè)事件函數(shù)
      只兼容IE10及以下
 <input type="button" value="點(diǎn)擊" id="btn">
    <script>
        var btn = document.getElementById("btn");    
        // DOM 2 級(jí)事件綁定方式
        // 兼容: IE 10以下
        //  IE 8 以下會(huì)出現(xiàn)事件隊(duì)列順序錯(cuò)亂
        btn.attachEvent("onclick",function() {
            alert(3);
        });
        btn.attachEvent("onclick",clickEvent);
        function clickEvent () {
            alert(4);
        }
    </script>

  • 兼容寫法
    為了應(yīng)對(duì)ie的兼容能力绸罗,利用瀏覽器的能力監(jiān)測(cè)和if語(yǔ)句條件判斷,將兩種寫法綜合到一起
  • 參數(shù):事件源豆瘫,事件類型(不加 on)珊蟀,事件函數(shù)
// 自己制作一個(gè)兼容所有瀏覽器的綁定事件函數(shù)
    // 參數(shù):事件源,事件類型,事件函數(shù)
    function addEvent (ele,type,fn) {
        // IE 9 及以上的瀏覽器和其他瀏覽器育灸,使用addEventListener方法
        // IE 9 以下的瀏覽器腻窒,使用 attachEvent 方法
        // 瀏覽器能力檢測(cè)
        if (ele.addEventListener) {
            ele.addEventListener(type,fn);
        }else if (ele.attachEvent) {
            ele.attachEvent("on" + type,fn);
        }
    }

5.3 事件解綁

  • DOM 0級(jí)事件解綁

ele.onclick = null

  • DOM 2級(jí)事件解綁
    element.removeEventListener() 方法

  • 參數(shù):

    • 參數(shù)1:事件類型的字符串,直接寫click
    • 參數(shù)2:事件函數(shù)應(yīng)用名
      注意:沒(méi)有辦法移除一個(gè)匿名函數(shù)
      兼容性問(wèn)題:不支持 IE9 以下的瀏覽器
  • element.detachEvent() 方法磅崭。

  • 參數(shù):

    • 參數(shù)1:事件類型的字符串(需要加 on)
    • 參數(shù)2:事件函數(shù)
      注意::沒(méi)有辦法移除一個(gè)匿名函數(shù)
      兼容性問(wèn)題:只支持 IE10 及以下的瀏覽器
 // DOM 0 級(jí)事件綁定方式
        // btn.onclick = function () {
        //     alert(1);
        // }
        // // 解除綁定
        // btn.onclick = null;
        // 綁定事件
        // btn.addEventListener("click",fun);
        // btn.addEventListener("click",fun2);
        // 解除綁定
        // btn.removeEventListener("click",fun);        
        // function fun() {
        //     alert(2);
        // }
        // function fun2 () {
        //     alert(3);
        // }
            // 綁定事件
            btn.attachEvent("onclick",fun1);
            // 解除綁定
            btn.detachEvent("onclick",fun);
                    function fun() {
                        alert(2);
                    }
  • 解綁事件綜合寫法

    • 參數(shù):事件源儿子,事件類型(不加 on),事件函數(shù)
 <input type="button" value="點(diǎn)擊" id="btn">
    <script>
        var btn = document.getElementById("btn");
        addEvent(btn,"click",fun1);
        function fun1() {
            alert(1);
        }
        // DOM 2 級(jí)事件綁定方式
        // 自己制作一個(gè)兼容所有瀏覽器的綁定事件函數(shù)
        // 參數(shù):事件源砸喻,事件類型柔逼,事件函數(shù)
        function addEvent (ele,type,fn) {
            // IE 9 及以上的瀏覽器和其他瀏覽器,使用addEventListener方法
            // IE 9 以下的瀏覽器割岛,使用 attachEvent 方法
            // 瀏覽器能力檢測(cè)
            if (ele.addEventListener) {
                ele.addEventListener(type,fn);
            }else if (ele.attachEvent) {
                ele.attachEvent("on" + type,fn);
            }
        }
        // 兼容所有瀏覽器的 解除綁定事件的函數(shù)
        // 參數(shù):事件源愉适,事件類型,事件函數(shù)
        function removeEvent(ele,type,fn) {
          // 瀏覽器能力檢測(cè)
          if (ele.removeEventListener) {
            ele.removeEventListener(type,fn);
          } else if (ele.detachEvent) {
            ele.detachEvent("on" + type,fn);
          }
        }
        
    </script>

6.DOM元素屬性操作

6.1非表單元素屬性

如href癣漆、title维咸、id、src等
調(diào)用:元素對(duì)象打點(diǎn)調(diào)用屬性名扑媚,obj.href
注意:部分屬性名跟關(guān)鍵字和保留字沖突腰湾,會(huì)更換寫法
class → className
for → htmlFor
rowspan → rowSpan
屬性賦值:給元素屬性賦值,等號(hào)右側(cè)的賦值都是字符串賦值

  var link = document.getElementById("link");
        var pic = document.getElementById("pic");
        // 調(diào)用元素對(duì)象的屬性疆股,從而操作 HTML 中的標(biāo)簽屬性
        console.log(link.textContent);//獲取的是文本內(nèi)容
        console.log(link.href);
        console.log(link.title);
        console.log(link.id);// id 是只讀屬性费坊,不可更改
        console.log(pic.id);// id 是只讀屬性,不可更改
        console.log(pic.src);
        console.log(pic.alt);
        console.log(pic.className);
        // 等號(hào)賦值旬痹,值必須是字符串類型
        pic.src = "images/b.jpg";

案例1:切換按鈕

<input type="button" value="點(diǎn)擊" id = "btn"><br>
    <img src="images/a.jpg" alt="美女" id = "pic">
    <script>
        // 獲取元素
        var btn = document.getElementById("btn");
        var pic = document.getElementById("pic");
        // 給按鈕添加點(diǎn)擊事件
        var num = 1;
        btn.onclick = function () {
            // 給圖片切換 src 屬性
            // 通過(guò) if 語(yǔ)句判斷附井,如果是 a 圖片,則切換為b两残,反之切換為 a
            if ( num === 1) {
                pic.src = "images/b.jpg";
                // 數(shù)字要跟著發(fā)生變化
                num = 2;
            }else {
                pic.src = "images/a.jpg";
                num = 1;
            }
        };

案例2:隱藏元素

<style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
        }
        .hide {
            display: none;
        }
        .show {
            display: block;
        }
    </style>
</head>
<body>
    <input type="button" value="點(diǎn)擊隱藏" id="btn">
    <div id="box"></div>
    <script>
        // 獲取元素
        var btn = document.getElementById("btn");
        var box = document.getElementById("box");
        // 點(diǎn)擊按鈕永毅,讓 div 顯示或隱藏
        // box.style.display = "none";
        btn.onclick = function () {
            // 點(diǎn)擊按鈕,讓 div 顯示或隱藏
            // 根據(jù) 按鈕 的 value 值進(jìn)行條件判斷
            if (btn.value === "點(diǎn)擊隱藏") {
                box.className = "hide";
                btn.value = "點(diǎn)擊顯示";
            }else {
                box.className = "show";
                btn.value = "點(diǎn)擊隱藏";
            }
        };
    </script>

6.2 this指向

  • 在事件函數(shù)內(nèi)部 有一個(gè) this人弓,指向事件源
    區(qū)分一下不同函數(shù)內(nèi)部 this 的指向
    • 普通函數(shù) --> window對(duì)象
    • 構(gòu)造函數(shù) --> 指向的是生成的實(shí)例對(duì)象
    • 對(duì)象的方法 --> 指向的是對(duì)象本身
    • 事件函數(shù) --> 指向的是事件源
 // 點(diǎn)擊按鈕沼死,讓 div 顯示或隱藏
            // 根據(jù) 按鈕 的 value 值進(jìn)行條件判斷
            if (this.value === "點(diǎn)擊隱藏") {
                box.className = "hide";
                this.value = "點(diǎn)擊顯示";
            }else {
                box.className = "show";
                this.value = "點(diǎn)擊隱藏";
            }
        };

        // 在事件函數(shù)內(nèi)部 有一個(gè) this,指向事件源
        // 區(qū)分一下不同函數(shù)內(nèi)部 this 的指向
        // 普通函數(shù)  --> window對(duì)象
        // 構(gòu)造函數(shù)  --> 指向的是生成的實(shí)例對(duì)象
        // 對(duì)象的方法 --> 指向的是對(duì)象本身
        // 事件函數(shù)  --> 指向的是事件源

6.3 獲取標(biāo)簽內(nèi)部?jī)?nèi)容的屬性

獲取標(biāo)簽內(nèi)部?jī)?nèi)容的屬性有兩個(gè):innerHTML和 innerText

  • innerHTML屬性會(huì)獲取全部?jī)?nèi)容崔赌,包括標(biāo)簽意蛀,獲取內(nèi)容的空白換行等
  • innerText屬性,如果有標(biāo)簽健芭,會(huì)過(guò)濾標(biāo)簽县钥,獲取內(nèi)容也會(huì)去掉換行和空白等。
box.innerHTML; // 
box.innerText;// 
box.innerHTML = "<h2>我會(huì)識(shí)別標(biāo)簽</h2>";
box.innerText = "<h2>我不會(huì)識(shí)別標(biāo)簽</h2>";

6.4 更改標(biāo)簽內(nèi)部?jī)?nèi)容

  • innerHTML設(shè)置屬性值慈迈、有標(biāo)簽的字符串若贮,會(huì)按照html語(yǔ)法的標(biāo)簽加載。
  • innerText設(shè)置有標(biāo)簽的屬性值的時(shí)候按照普通字符加載。
    應(yīng)用場(chǎng)景:
  • innerText設(shè)置純字符串
  • innerHTML設(shè)施有標(biāo)簽的結(jié)構(gòu)
// 更改標(biāo)簽內(nèi)容谴麦、
        box.innerHTML = "<h2>hello js<\h2>";
        box.innerText = "<h2>hello js<\h2>";

6.5 表單元素操作

  • Value用于大部分表單元素內(nèi)容獲却姥亍(option除外)
  • type 可以獲取input標(biāo)簽的類型(輸入框或復(fù)選框等)
    ? disabled 禁用屬性
    ? checked 復(fù)選框選中屬性
    ? selected 下拉菜單選中屬性
    ? 注意:在 DOM 中元素對(duì)象的屬性值只有一個(gè)時(shí),會(huì)被轉(zhuǎn)成布爾值顯示细移。
   <input type="text" class="gray" value="請(qǐng)輸入搜索關(guān)鍵字" id="txtSearch">
  <input type="button" value="搜索" id="btnSearch">
  <script>
    //   獲取元素
    var txtSearch = document.getElementById("txtSearch");
    //   1搏予、獲得焦點(diǎn)時(shí),可以使用 onfocus弧轧,如果文本框內(nèi)容是默認(rèn) 請(qǐng)輸入搜索關(guān)鍵字,碗殷,需要清空文字精绎,讓文字顏色加載黑色
    txtSearch.onfocus = function () {
        if (this.value === "請(qǐng)輸入搜索關(guān)鍵字" ) {
            this.value = "";
            this.className = "black";
        }
    };
    // 2、失去焦點(diǎn)時(shí)锌妻,可以使用一個(gè) onblur代乃,如果文本框內(nèi)容為空,需要改為默認(rèn)提示內(nèi)容仿粹, 請(qǐng)輸入搜索關(guān)鍵字搁吓,讓文字顏色變?yōu)榛疑?    txtSearch.onblur = function () {
        // 如果用戶輸入內(nèi)容正好與默認(rèn)提示文本相同,失去焦點(diǎn)時(shí)吭历,也應(yīng)該讓蚊子顏色變?yōu)榛疑?        // 判斷內(nèi)容是否為空
        if (this.value === "") {
            this.value = "請(qǐng)輸入搜索關(guān)鍵字";
            this.className = "gray";
        }
    };

6.6 自定義屬性

? getAttribute(name) 獲取標(biāo)簽行內(nèi)屬性
? setAttribute(name堕仔,value) 設(shè)置標(biāo)簽行內(nèi)屬性
? removeAttribute(name) 移除標(biāo)簽行內(nèi)屬性
? 與element.屬性的區(qū)別: 上述三個(gè)方法用于獲取任意的行內(nèi)屬性,包括自定義的屬性晌区。

 <div id="box" age="18" sex="male">小明</div>
    <script>
        // 獲取元素
        var box = document.getElementById("box");
        // 元素自有屬性
        console.log(box.id);
        // 元素自定義的新屬性不能用點(diǎn)語(yǔ)法調(diào)用
        // 可以調(diào)用元素對(duì)象的獲取自定義屬性的方法
        console.log(box.getAttribute("age"));
        console.log(box.getAttribute("sex"));
        // 也可以調(diào)用自有屬性
        console.log(box.getAttribute("id"));
        // 設(shè)置屬性摩骨,添加新的自定義屬性或者自有屬性
        box.setAttribute("age","20");
        box.setAttribute("city","beijing");
        // 傳的參數(shù)不需要進(jìn)行屬性名的修改,也可以傳入原本封裝好的參數(shù)朗若,比如class
        box.setAttribute("class","demo");

        // 移除屬性
        box.removeAttribute("age");
    </script>

6.7 Style屬性操作

  • style的獲取的值是行內(nèi)樣式組成的樣式對(duì)象恼五,內(nèi)嵌式和外鏈的樣式是得不到的
  • 設(shè)置寬度,高度哭懈,位置的屬性類型是字符串灾馒,需要加上px
  • 復(fù)合屬性轉(zhuǎn)換成駝峰性
  • 在實(shí)際工作中,如果需要修改多條通過(guò)類名的方式遣总,如果需要修改的樣式只有1-2條直接使用style操作
  <script>
        // 工作中選擇哪種方式
        // 獲取元素
        var btn = my$("btn");
        var box = my$("box");
        // 給按鈕添加點(diǎn)擊事件
        btn.onclick = function () {
            // 1.更改類名的方法
            // box.className = "cls";
            // 2.通過(guò)元素對(duì)象的style屬性設(shè)置
            box.style.width = "100px";
            box.style.height = "100px";
            box.style.backgroundColor = "blue";
            // 如果更改條數(shù)比較多睬罗,選擇更改類名方式,如果更改屬性比較少彤避,則選擇style方式
        };
    </script>

6.8 節(jié)點(diǎn)

節(jié)點(diǎn)屬性
Nodetype 節(jié)點(diǎn)的類型傅物,屬性值為數(shù)字,表示不同節(jié)點(diǎn)類型琉预,只讀
1 元素節(jié)點(diǎn)
2 屬性節(jié)點(diǎn)
3 文本節(jié)點(diǎn)

  • NodeName 節(jié)點(diǎn)的名稱(標(biāo)簽名稱)董饰,只讀
  • NodeValue 節(jié)點(diǎn)值,返回或者是當(dāng)前節(jié)點(diǎn)值,元素節(jié)點(diǎn)的nodeValue始終是null
    <div id="box"></div>
    <script>
        var box = document.getElementById("box");
        // 1.元素節(jié)點(diǎn)
        console.dir(box);
        // 屬性節(jié)點(diǎn)獲取
        var idNode = box.getAttributeNode("id");
        console.dir(idNode);
        idNode.nodeValue = "demo";
        
        // 文本節(jié)點(diǎn)
        var childNodes = box.childNodes;
        console.log(childNodes);
        childNodes[0].nodeValue = "box 1";
    </script>

節(jié)點(diǎn)關(guān)系

  • 父子節(jié)點(diǎn)常用屬性

? childNodes 卒暂,獲取一個(gè)節(jié)點(diǎn)所有子節(jié)點(diǎn)的實(shí)時(shí)的集合啄栓,集合是動(dòng)態(tài)變化的,只讀(數(shù)組)

? children 也祠,返回一個(gè)節(jié)點(diǎn)所有的子元素節(jié)點(diǎn)集合昙楚,是一個(gè)動(dòng)態(tài)更新的 HTML 元素集合,只讀(不包含文本和屬性節(jié)點(diǎn))

? firstChild 诈嘿,返回該節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn)堪旧,沒(méi)有返回 null。只讀

? lastChild 奖亚,返回該節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)淳梦,沒(méi)有返回 null。只讀

? parentNode 返回一個(gè)當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)昔字,如果沒(méi)有這樣的節(jié)點(diǎn)爆袍,比如說(shuō)像這個(gè)節(jié)點(diǎn)是樹結(jié)構(gòu)的頂端或者沒(méi)有插入一棵樹中,這個(gè)屬性返回 null作郭。

? parentElement 返回當(dāng)前節(jié)點(diǎn)的父元素節(jié)點(diǎn)陨囊,如果該元素沒(méi)有父節(jié)點(diǎn),或者父節(jié)點(diǎn)不是一個(gè) DOM元素夹攒,則返回 null蜘醋。

 var box = document.getElementById("box");
        // 獲取子節(jié)點(diǎn)
        console.log(box.childNodes);//獲取所有類型的子節(jié)點(diǎn)(會(huì)獲取一些不需要的換行符號(hào)等)
        console.log(box.children);//獲取所有元素類型的子節(jié)點(diǎn),用的較多
        console.log(box.firstChild);//獲取所有類型的子節(jié)點(diǎn)的第一個(gè)
        console.log(box.lastChild);//獲取所有類型的子節(jié)點(diǎn)的最后一個(gè)
        console.log(box.lastElementChild);//獲取所有元素類型的子節(jié)點(diǎn)的最后一個(gè)(用的多)
        // 獲取父級(jí)
        console.log(box.parentNode);//獲取父級(jí)的元素節(jié)點(diǎn)
        console.log(box.parentElement);
  • 兄弟節(jié)點(diǎn)關(guān)系
    ? nextSibling 芹助,返回與該節(jié)點(diǎn)同級(jí)的下一個(gè)節(jié)點(diǎn)堂湖,沒(méi)有返回null。只讀屬性

    ? previousSibling 状土,返回與該節(jié)點(diǎn)同級(jí)的上一個(gè)節(jié)點(diǎn)无蜂,沒(méi)有返回null。只讀屬性

    ? nextElementSibling 蒙谓,返回與該節(jié)點(diǎn)同級(jí)的下一個(gè)元素節(jié)點(diǎn)斥季,如果沒(méi)有返回null。只讀屬性

    注意:nextElementSibling 和 previousElementSibling 有兼容性問(wèn)題累驮,IE9以后才支持酣倾。

  • 創(chuàng)建新節(jié)點(diǎn)
    ? document.createElement("div") 創(chuàng)建元素節(jié)點(diǎn)
    ? document.createAttribute("id") 創(chuàng)建屬性節(jié)點(diǎn)
    ? document.createTextNode("hello") 創(chuàng)建文本節(jié)點(diǎn)
    ? parentNode.appendChild(child):將一個(gè)節(jié)點(diǎn)添加到指定父節(jié)點(diǎn)的子節(jié)點(diǎn)列表末尾。
    保存到變量中谤专,方便使用.

// 創(chuàng)建新的節(jié)點(diǎn)
    var div = document.createElement("div");
    var cls = document.createAttribute("class");
    var txt = document.createTextNode("hello");
    // 創(chuàng)建的新的節(jié)點(diǎn)躁锡,是存儲(chǔ)在內(nèi)存中的,但是并沒(méi)添加到 DOM 樹上
    // 獲取元素
    var box = my$("box");
    var p2 = my$("p2");
    box.appendChild(div);
    // 文本節(jié)點(diǎn)也可以添加到元素內(nèi)部
    div.appendChild(txt);
    // 注意:自己創(chuàng)建的元素節(jié)點(diǎn)本身也是一個(gè)對(duì)象置侍,也可以去添加一些新的屬性和方法映之,這些操作將來(lái)在元素加載到 DOM 樹中時(shí)拦焚,依舊保留

    // DOM 中原有的節(jié)點(diǎn)也可以傳給 appendChild 的參數(shù)
    box.appendChild(p2);

節(jié)點(diǎn)操作

  • parentNode.replaceChild(newChild, oldChild):用指定的節(jié)點(diǎn)替換當(dāng)前節(jié)點(diǎn)的一個(gè)子節(jié)點(diǎn),并返回被替換掉的節(jié)點(diǎn)杠输。

  • parentNode.insertBefore(newNode, referenceNode):在參考節(jié)點(diǎn)之前插入一個(gè)擁有指定父節(jié)點(diǎn)的子節(jié)點(diǎn)赎败,
    referenceNode 必須設(shè)置,如果 referenceElement 為 null 則 newNode將被插入到子節(jié)點(diǎn)的末尾蠢甲。

  • parentNode.removeChild(child):移除當(dāng)前節(jié)點(diǎn)的一個(gè)子節(jié)點(diǎn)僵刮。這個(gè)子節(jié)點(diǎn)必須存在于當(dāng)前節(jié)點(diǎn)中。

  • Node.cloneNode():克隆一個(gè)節(jié)點(diǎn)鹦牛,并且可以選擇是否克隆這個(gè)節(jié)點(diǎn)下的所有內(nèi)容搞糕。參數(shù)為Boolean 布爾值,表示是否采用深度克隆,如果為 true,則該節(jié)點(diǎn)的所有后代節(jié)點(diǎn)也都會(huì)被克隆,如果為 false,則只克隆該節(jié)點(diǎn)本身能岩,默認(rèn)值為 true寞宫,節(jié)點(diǎn)下的內(nèi)容會(huì)被克隆。
    ? 注意:克隆時(shí)拉鹃,標(biāo)簽上的屬性和屬性值也會(huì)被復(fù)制,寫在標(biāo)簽行內(nèi)的綁定事件可以被復(fù)制鲫忍,但是通過(guò) JavaScript 動(dòng)態(tài)綁定的事件不會(huì)被復(fù)制膏燕。

<div id="box">
        <p>段落內(nèi)容 1</p>
        <p id="p2">段落內(nèi)容 2</p>
        <p>段落內(nèi)容 3</p>
        <p>段落內(nèi)容 4</p>
      </div>
      <script src="common.js"></script>
      <script>
        //   創(chuàng)建新節(jié)點(diǎn)
        var div = document.createElement("div");
        var cls = document.createAttribute("class");
        console.log(cls);
        var txt = document.createTextNode("hello");

        // 創(chuàng)建新的節(jié)點(diǎn),是存儲(chǔ)在內(nèi)存中的悟民,并沒(méi)有放在 DOM樹中
        div.appendChild(txt);
        // 獲取元素
        var box = my$("box");
        var p2 = my$("p2");
        // 替換節(jié)點(diǎn)
        // box.replaceChild(div,p2);

        // 在某個(gè)指定子節(jié)點(diǎn)之前添加一個(gè)新的子節(jié)點(diǎn)
        box.insertBefore(div,p2);

        box.insertBefore(div,null);
        // 移除節(jié)點(diǎn)
        box.removeChild(p2);
        // 克隆元素box
        // 淺度克隆
        // var newBox = box.cloneNode(false);
        // 深度克隆
        var newBox = box.cloneNode(true);
        new box.id = "newBox";
        document.body.appendChild(newBox);

    </script>

節(jié)點(diǎn)判斷

? Node.hasChildNodes():沒(méi)有參數(shù)坝辫,返回一個(gè) Boolean 布爾值,來(lái)表示該元素是否包含有子節(jié)點(diǎn)射亏。
? Node.contains(child):返回一個(gè) Boolean 布爾值近忙,來(lái)表示傳入的節(jié)點(diǎn)是否為該節(jié)點(diǎn)的后代節(jié)點(diǎn)。

 // 判斷內(nèi)部有子節(jié)點(diǎn)的方法有三種
    // 1.判斷有沒(méi)有子節(jié)點(diǎn),不區(qū)分節(jié)點(diǎn)類型
    // console.log(box.hasChildNodes());
    // console.log(demo.hasChildNodes());
    // 2.判斷節(jié)點(diǎn)內(nèi)部第一個(gè)子節(jié)點(diǎn)是否不為空
    // console.log(box.firstChild !== null);
    // console.log(demo.firstChild !== null);
    // 3.判斷子節(jié)點(diǎn)的數(shù)組對(duì)象的長(zhǎng)度是否為0
    console.log(box.childNodes.length > 0);
    console.log(demo.childNodes.length > 0);

    // 補(bǔ)充子元素節(jié)點(diǎn)是否存在
    console.log(box.children.length > 0);
    console.log(demo.children.length > 0);
    // 判斷節(jié)點(diǎn)內(nèi)部是否有某個(gè)后代節(jié)點(diǎn)
    // console.log(box.contains(p2));

案例:

<h1>動(dòng)態(tài)創(chuàng)建列表</h1>
    <div id="box">
      <!-- <ul>
        <li>劉備</li>
      </ul> -->
    </div>
    <script src="common.js"></script>
    <script>
        // 獲取元素
        var box = my$("box");
        // 創(chuàng)建一組數(shù)據(jù)
        var names = ["劉備","曹操","孫權(quán)","關(guān)羽"];
        // 添加ul元素
        var ul = document.createElement("ul");
        // 添加元素到box內(nèi)部
        box.appendChild(ul);
        // 根據(jù)數(shù)組項(xiàng)向 li 中添加數(shù)據(jù)
        for (var i = 0 ; i < name.length ; i++) {
            // 每次生成一個(gè)新的 li 元素
            var li = document.createElement("li");
            // 向 ul 里添加 li
            ul.appendChild(li);
            // 給每個(gè) li 元素添加內(nèi)容
            li.innerText = names[i];
        }

6.9 事件流

事件流

存在捕獲現(xiàn)象時(shí)智润,先捕獲及舍,在進(jìn)行冒泡

  • addEventListener 第三參數(shù):用來(lái)事件流的方向,參數(shù)是布爾值窟绷,false:事件冒泡類型锯玛; true:事件捕獲類型。默認(rèn)值是false
    三個(gè)階段
    1. 事件捕獲
    2. 事件執(zhí)行
    3. 事件冒泡
  • addEventListener() 第三個(gè)參數(shù)為 false 時(shí)兼蜈,事件冒泡
  • addEventListener() 第三個(gè)參數(shù)為 true 時(shí)攘残,事件捕獲
  • onclick 的方法類型:只能進(jìn)行事件冒泡過(guò)程,沒(méi)有捕獲階段
  • attachEvent() 方法:只能進(jìn)行事件冒泡過(guò)程为狸,沒(méi)有捕獲階段
    <div id="box1">
        <div id="box2">
            <div id="box3"></div>
        </div>
    </div>
    <script>
        // 獲取元素
        var box1 = document.getElementById("box1");
        var box2 = document.getElementById("box2");
        var box3 = document.getElementById("box3");
        // 添加點(diǎn)擊事件
        // addEventListener 有第三個(gè)參數(shù)歼郭,用來(lái)決定事件流的方向
        // 參數(shù)值是 布爾類型的值,false 表示事件冒泡過(guò)程辐棒,true 表示事件捕獲過(guò)程
        // 參數(shù)默認(rèn)值是 false
        // box1.addEventListener("click",function () {
        //     console.log(1);
        // },false);
        // box2.addEventListener("click",function () {
        //     console.log(2);
        // },false);
        // box3.addEventListener("click",function () {
        //     console.log(3);
        // },false);
        // box1.addEventListener("click",function () {
        //     console.log(this.id);
        // },true);
        // box2.addEventListener("click",function () {
        //     console.log(this.id);
        // },true);
        // box3.addEventListener("click",function () {
        //     console.log(this.id);
        // },true);

        // onclick 屬性添加事件方法只有冒泡過(guò)程病曾,沒(méi)有捕獲過(guò)程
        // attachEvent() 方法添加事件方法只有冒泡過(guò)程牍蜂,沒(méi)有捕獲過(guò)程
        box1.onclick = function () {
            console.log(1);
        };
        box2.onclick = function () {
            console.log(2);
        };
        box3.onclick = function () {
            console.log(3);
        };

事件委托
利用事件冒泡,將子級(jí)事件委托給父級(jí)加載
同時(shí)需要利用事件函數(shù)的 e 參數(shù)知态,內(nèi)部存儲(chǔ)的是事件對(duì)象

   <ul id="list">
        <li>劉亦菲</li>
        <li>楊冪</li>
        <li>唐嫣</li>
        <li>趙麗穎</li>
        <li>劉詩(shī)詩(shī)</li>
    </ul>
    <script>
        // 讓每個(gè) li 被點(diǎn)擊后捷兰,添加特殊背景色,其他的不添加
        // 以前思路:獲取每個(gè)li標(biāo)簽负敏,批量添加事件
        // 事件委托:可以將一些子級(jí)的公共類型的事件委托給他們的父級(jí)添加贡茅,在父級(jí)內(nèi)部想辦法找到真正觸發(fā)事件的最底層的事件源
        // 獲取元素
        var list = document.getElementById("list");
        var lis = list.children;
        // 給ul添加點(diǎn)擊事件
        list.onclick = function () {
            // 在內(nèi)部要想辦法找到真正出發(fā)的事件 li 
            // 借用事件函數(shù)內(nèi)部的一個(gè)參數(shù) e ,e 是事件對(duì)象
            // 只要觸發(fā)事件其做,函數(shù)內(nèi)部都可以得到一個(gè)事件對(duì)象顶考,對(duì)象中存儲(chǔ)了關(guān)于事件的一系列數(shù)據(jù)
            // e.target 屬性記錄的就是真正觸發(fā)事件的事件源
            // 排除其他
            for (var i = 0; i < lis.length; i++) {
                lis[i].style.backgroundColor = "";
            }
            e.target.style.backgroundColor = "pink";
        };
    </script>

事件對(duì)象
只要觸發(fā)事件,就有一個(gè)對(duì)象妖泄,內(nèi)部存儲(chǔ)了事件相關(guān)數(shù)據(jù)

  • e.eventPhase 查看事件觸發(fā)時(shí)所處的階段
  • e.target 用于獲取觸發(fā)事件的元素
  • e.srcElement 用于獲取觸發(fā)事件的元素驹沿,低版本瀏覽器使用
  • e.currentTarget 用于獲取綁定事件的事件源元素
    e在低版本瀏覽器中有兼容問(wèn)題,低版本瀏覽器使用的是window.event
            // 獲取真正出發(fā)事件的元素蹈胡,兼容寫法
            var target = e.target || e.srcElement;
            // 事件對(duì)象兼容
            e = e || window.event;


  • e.type 獲取事件類型
  • e.clientX/e.clientY 所有瀏覽器都支持渊季,鼠標(biāo)距離瀏覽器窗口左上角的距離
  • e.pageX/e.pageY IE8 以前不支持,鼠標(biāo)距離整個(gè)HTML頁(yè)面左上頂點(diǎn)的距離
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        #box1{
            width: 200px;
            height: 200px;
            background-color: yellowgreen;
        }
    </style>
</head>
<body>
    <div id="box1"></div>
    <script>
        // 獲取元素
        var box1 = document.getElementById("box1");

        // e.type 屬性獲取事件類型
        // box1.onclick = function (e) {
        //     // 事件對(duì)象兼容
        //     e = e || window.event;
        //     // 觸發(fā)的事件類型
        //     console.log(e.type);
        // };

        // 更多時(shí)候可能給同一個(gè)元素對(duì)象添加不同的事件類型罚渐,對(duì)應(yīng)執(zhí)行的事件函數(shù)內(nèi)部的代碼 不同
        // box1.onmouseover = function () {
        //     box1.style.backgroundColor = "skyblue";
        // };
        // box1.onmouseout = function () {
        //     box1.style.backgroundColor = "yellowgreen";
        // };
        // 可以將 所有給一個(gè)元素綁定的事件函數(shù)寫在一個(gè) 函數(shù)內(nèi)却汉,通過(guò)函數(shù)內(nèi)部的 e.type 判斷走不同的分支
        // box1.onmouseover = fn;
        // box1.onmouseout = fn;
        // // 避免添加多個(gè)函數(shù),占用更多的內(nèi)存
        // function fn (e) {
        //     e = e || window.event;
        //     switch (e.type) {
        //         case "mouseover":
        //             box1.style.backgroundColor = "pink";
        //             break;
        //         case "mouseout":
        //             box1.style.backgroundColor = "skyblue";
        //             break;
        //     }
        // }
        // 事件對(duì)象中一些獲取尺寸的屬性
        box1.onclick = function (e) {
            // client系列:客戶端尺寸荷并,點(diǎn)擊的點(diǎn)參考瀏覽器窗口左上角的距離
            console.log(e.clientX);
            console.log(e.clientY);
            // page 系列:html 頁(yè)面尺寸合砂,點(diǎn)擊的點(diǎn)參考html 文檔左上角距離
            console.log(e.pageX);
            console.log(e.pageY);
        }

取消默認(rèn)行為和組織時(shí)間傳播的方式

  • e.preventDefault() 取消默認(rèn)行為
  • e.returnValue 取消默認(rèn)行為,低版本瀏覽器使用
  • e.stopPropagation(); 阻止冒泡源织,標(biāo)準(zhǔn)方式
  • e.cancelBubble = true; 阻止冒泡翩伪,IE 低版本,標(biāo)準(zhǔn)中已廢棄
    <a id="link" href="52_圖片跟隨鼠標(biāo)移動(dòng)效果.html">點(diǎn)擊</a>
    <script>
         var link = document.getElementById('link');
         link.onclick = function (e) {
            e = e || window.event;
            alert("hello");
            // 普通的方式阻止默認(rèn)行為
            return false;
            // DOM 方法
            e.preventDefault();
            // 低版本瀏覽器需要使用一個(gè)對(duì)象的屬性
            e.returnValue = false;
         }
    </script>

   <div id="box1">
        <div id="box2">
          <div id="box3">
          </div>
        </div>
      </div>
    <script>
        // 事件冒泡
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var box3 = document.getElementById('box3');

        var array = [box1, box2, box3];

        for (var i = 0; i < array.length; i++) {
            var box = array[i];
            box.onclick = function (e) {
              e = e || window.event;
              console.log(this.id);
              // 阻止事件冒泡
              // e.stopPropagation();
              // 低版本瀏覽器使用 屬性
              e.cancelBubble = true;
            }
        }

6.10 DOM特效

偏移量屬性
? offsetParent 偏移參考父級(jí)谈息,距離自己最近的有定位的父級(jí)缘屹,如果都沒(méi)有定位參考body(html)
? offsetLeft/offsetTop 偏移位置
? offsetWidth/offsetHeight 偏移大小(border及以內(nèi)的寬高)

偏移量
 <script>
              // 獲取元素
              var child = document.getElementById("child");
              // 元素天生就認(rèn)識(shí)自己的偏移參考父級(jí)
              // console.log(child.offsetParent);
              
              // 偏移位置
              // console.log(child.offsetLeft);
              // console.log(child.offsetTop);
              
              // 偏移大小
              console.log(child.offsetWidth);
              console.log(child.offsetHeight);
      </script>

客戶端大小
? client 系列沒(méi)有參考父級(jí)元素黎茎。
? clientLeft/clientTop 邊框區(qū)域尺寸囊颅,不常用
? clientWidth/clientHeight 邊框內(nèi)部大小

客戶端大小

滾動(dòng)偏移屬性
? scrollLeft/scrollTop 盒子內(nèi)部滾動(dòng)出去的尺寸
? scrollWidth/scrollHeight 盒子內(nèi)容的寬度和高度

滾動(dòng)偏移
 var box = document.getElementById("box");
        // 滾動(dòng)便宜位置和大小
        // 滾動(dòng)條滾動(dòng)事件
        box.onscroll = function () {
            console.log(box.scrollLeft);
            console.log(box.scrollTop);
        }

二、BOM 瀏覽器對(duì)象模型

  • 提供了獨(dú)立于內(nèi)容的傅瞻、可以與瀏覽器窗口進(jìn)行互動(dòng)的對(duì)象結(jié)構(gòu)踢代。
  • BOM 由多個(gè)對(duì)象組成,其中代表瀏覽器窗口的 Window對(duì)象是 BOM 的頂層對(duì)象嗅骄,其他對(duì)象都是該對(duì)象的子對(duì)象胳挎。
    -我們?cè)跒g覽器中的一些操作都可以使用BOM的方式進(jìn)行編程處理,比如:刷新瀏覽器溺森、后退慕爬、前進(jìn)窑眯、在瀏覽器中輸入U(xiǎn)RL等。

1.Window對(duì)象

window 是瀏覽器的頂級(jí)對(duì)象医窿,當(dāng)調(diào)用 window 下的屬性和方法時(shí)磅甩,可以省略 window。
有兩個(gè)特殊的屬性:window.name(會(huì)在原來(lái)的name屬性上賦值)和window.top (只讀的姥卢,不能后期更改)

2.對(duì)話框

Alert()
Prompt()
Confirm()

 // 警示框
    btn1.onclick = function () {
      alert("hello");
    };

    // 提示框
    btn2.onclick = function () {
      var num = prompt("請(qǐng)輸入一個(gè)數(shù)字",12);
      console.log(num);
    };

    // 讓用戶確認(rèn)或者選擇的對(duì)話框
    // confirm 方法有返回值卷要,根據(jù)按鈕點(diǎn)擊情況,如果返回確定独榴,返回true僧叉,點(diǎn)擊取消返回false
    btn.onclick = function () {
        confirm("請(qǐng)問(wèn),你確定刪除這條數(shù)據(jù)嗎棺榔?");
    };

3.加載事件

  • Onload事件
    window加載完畢才會(huì)執(zhí)行的事件函數(shù)
    Window對(duì)象加載完畢:指的是html結(jié)構(gòu)加載完瓶堕,并引入外部資源(js、css症歇、img郎笆、視頻)也加載完畢。
    一個(gè)頁(yè)面只能有一個(gè)window.onload事件

4.延時(shí)器:

Window對(duì)象的方法忘晤,類似于定時(shí)炸彈

  • 功能:指定時(shí)間后執(zhí)行函數(shù)
  • window.setTimeout(func,time);
    • 參數(shù)1:執(zhí)行函數(shù)题画,可以匿名,可以函數(shù)名引用德频,不要加括號(hào)
    • 參數(shù)2:時(shí)間,毫秒為單位
// 延時(shí)器
        // 異步語(yǔ)句
        var timeout = window.setTimeout(function () {
            console.log("hello");
        },2000);

5.定時(shí)器

Window對(duì)象方法缩幸,壹置,每隔一段時(shí)間執(zhí)行一次

  • 功能:每隔指定時(shí)間,周期性執(zhí)行
  • window.setInterval(func,interval);
    • 參數(shù)1:執(zhí)行函數(shù)表谊,可以匿名或者函數(shù)引用
    • 參數(shù)2:時(shí)間間隔钞护,毫秒單位
      清除定時(shí)器
  • window.clearInterval(timer);
    • 參數(shù):指定的定時(shí)器變量名引用。
      ? 功能:清除指定的定時(shí)器爆办。
      ? 注意:清除的定時(shí)器需要存儲(chǔ)到一個(gè)變量中难咕,便于后期清除調(diào)用。
<!-- 開啟定時(shí)器: 每隔 0.5 秒輸出一次 i距辆, 并且讓 i 每次自加 -->
    <script>
        var i = 1;
        // 定時(shí)器也是異步加載
        // 程序執(zhí)行定時(shí)器代碼部分相當(dāng)于開啟定時(shí)器余佃,不需要其他操作
        // 第一次執(zhí)行函數(shù)時(shí),是在第一個(gè)時(shí)間間隔之后
        // 清除定時(shí)器跨算,在定義的時(shí)候必須存到一個(gè)變量中
        var timer = window.setInterval(function () {
            console.log(i++);
        },500);
        // 清除定時(shí)器
        window.clearTimeout(timer);
    </script>

6.簡(jiǎn)單運(yùn)動(dòng)

通過(guò)定時(shí)器爆土,實(shí)現(xiàn)每隔一個(gè)極短的時(shí)間(50-100 毫秒左右),執(zhí)行函數(shù)诸蚕,函數(shù)內(nèi)部讓運(yùn)動(dòng)的屬性值發(fā)生變化步势。
拉終停表案例
設(shè)表先關(guān)案例請(qǐng)查閱筆記氧猬,此處不展示。

7.location對(duì)象

location 對(duì)象是 window 對(duì)象下的一個(gè)屬性坏瘩,使用的時(shí)候可以省略 window 對(duì)象
? location 可以獲取或者設(shè)置瀏覽器地址欄的 URL
? 使用 chrome 的控制臺(tái)查看
? 查 MDN:https://developer.mozilla.org/zh-CN/

        var btn = document.getElementById("btn");
        btn.onclick = function () {
        //     // 輸出url地址
        //     console.log(location.href);
        //     // 重新賦值
        //     location.;
        // 
        // assign委派
            // assign() 方法作用與href屬性相同盅抚,可以設(shè)置頁(yè)面跳轉(zhuǎn)地址
            // location.assign("http://www.lagou.com");
            
            
            // replace替換
            // 替換掉地址欄中當(dāng)前網(wǎng)址,不記錄歷史網(wǎng)址
            // location.replace("http://www.lagou.com");

            // reload重新加載
            // 類似于鍵盤 f5功能倔矾,類似于false效果妄均,ctrl+f5強(qiáng)制刷新,從服務(wù)器獲取頁(yè)面破讨,相當(dāng)于true
            // 參數(shù):true強(qiáng)制從服務(wù)器獲取頁(yè)面丛晦,false從瀏覽器換粗又網(wǎng)頁(yè)的話,直接從緩存獲取
            location.reload(true);

        };
location對(duì)象屬性 返回值
location.href 獲取或設(shè)置url
location.host 返回主機(jī)域名
location.prot 返回端口號(hào) 如沒(méi)有返回空字符串
location.pathname 返回路徑
location.search 返回參數(shù)
location.hash 返回片段 #后面的內(nèi)容 常見(jiàn)于鏈接提陶,錨點(diǎn)
location.assgin() 方法 實(shí)現(xiàn)跳轉(zhuǎn) 可以重定向 計(jì)入瀏覽歷史
location.replace() 方法 實(shí)現(xiàn)跳轉(zhuǎn) 不計(jì)入歷史
location.reload() 方法 重新加載頁(yè)面 參數(shù)為true是強(qiáng)制刷新

8.history對(duì)象

history 對(duì)象是 window 對(duì)象下的一個(gè)屬性烫沙,使用的時(shí)候可以省略 window 對(duì)象

history對(duì)象方法 作用
history.back() 后退
history.forward() 前進(jìn)
history.go(參數(shù)) 前進(jìn)后退功能 1前進(jìn) -1后退

9.url 對(duì)象

統(tǒng)一資源定位符 (Uniform Resource Locator, URL)

URL的組成:scheme://host:port/path?query#fragment

例如:http://www.lagou.com:80/a/b/index.html?name=zs&age=18#bottom

? scheme:通信協(xié)議,常用的http,ftp,maito等

? host:主機(jī)隙笆,服務(wù)器(計(jì)算機(jī))域名系統(tǒng) (DNS) 主機(jī)名或 IP 地址锌蓄。

? port:端口號(hào),整數(shù)撑柔,可選瘸爽,省略時(shí)使用方案的默認(rèn)端口,如http的默認(rèn)端口為80铅忿。

? path:路徑剪决,由零或多個(gè)'/'符號(hào)隔開的字符串,一般用來(lái)表示主機(jī)上的一個(gè)目錄或文件地址檀训。

? query:查詢柑潦,可選,用于給動(dòng)態(tài)網(wǎng)頁(yè)傳遞參數(shù)峻凫,可有多個(gè)參數(shù)渗鬼,用'&'符號(hào)隔開,每個(gè)參數(shù)

的名和值用'='符號(hào)隔開荧琼。例如:name=zs

? fragment:信息片斷譬胎,字符串,錨點(diǎn).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末命锄,一起剝皮案震驚了整個(gè)濱河市堰乔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌累舷,老刑警劉巖浩考,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異被盈,居然都是意外死亡析孽,警方通過(guò)查閱死者的電腦和手機(jī)搭伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袜瞬,“玉大人怜俐,你說(shuō)我怎么就攤上這事〉擞龋” “怎么了拍鲤?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)汞扎。 經(jīng)常有香客問(wèn)我季稳,道長(zhǎng),這世上最難降的妖魔是什么澈魄? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任景鼠,我火速辦了婚禮,結(jié)果婚禮上痹扇,老公的妹妹穿的比我還像新娘铛漓。我一直安慰自己,他們只是感情好鲫构,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布浓恶。 她就那樣靜靜地躺著,像睡著了一般结笨。 火紅的嫁衣襯著肌膚如雪包晰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天炕吸,我揣著相機(jī)與錄音杜窄,去河邊找鬼。 笑死算途,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚀腿。 我是一名探鬼主播嘴瓤,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莉钙!你這毒婦竟也來(lái)了廓脆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磁玉,失蹤者是張志新(化名)和其女友劉穎停忿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚊伞,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡席赂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吮铭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颅停。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谓晌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出癞揉,到底是詐尸還是另有隱情纸肉,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布喊熟,位于F島的核電站柏肪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芥牌。R本人自食惡果不足惜烦味,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胳泉。 院中可真熱鬧拐叉,春花似錦、人聲如沸扇商。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)案铺。三九已至蔬芥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間控汉,已是汗流浹背笔诵。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姑子,地道東北人乎婿。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像街佑,于是被迫代替她去往敵國(guó)和親谢翎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容