javascript中BOM部分基礎知識總結

1、什麼是BOM正則表達式

     BOM(Browser Object Model)即瀏覽器對象模型。瀏覽器

     BOM提供了獨立於內容 而與瀏覽器窗口進行交互的對象;app

     因爲BOM主要用於管理窗口與窗口之間的通信,所以其核心對象是window;框架

     BOM由一系列相關的對象構成,而且每一個對象都提供了不少方法與屬性;函數

     BOM缺少標準,JavaScript語法的標準化組織是ECMA,DOM的標準化組織是W3C,BOM最初是Netscape瀏覽器標準的一部分。性能

2、學習BOM學什麼學習

   咱們將學到與瀏覽器窗口交互的一些對象,例如能夠移動、調整瀏覽器大小的window對象,能夠用於導航的location對象與history對象,能夠獲取瀏覽器、操做系統與用戶屏幕信息的navigator與screen對象,可使用document做爲訪問HTML文檔的入口,管理框架的frames對象等。在這裏,只介紹一些window對象等的基礎知識,其中會有一些ECMAscript的知識還會說明。其餘對象Location、Screen、Navigator、History不一一詳細介紹了。。this

BOM結構圖

3、window對象url

window對象是js中的頂級對象,全部定義在全局做用域中的變量、函數都會變成window對象的屬性和方法,在調用的時候能夠省略window。spa

例:打開窗口 window.open(url,target,param);

   // url 要打開的地址

     //target  新窗口的位置   _blank  _self  _parent(父框架)

     //param  新窗口的一些設置

     //返回值,新窗口的句柄

          關閉窗口:window.close();

4、BOM零碎知識(window對象)

1.定時器
 延遲執行     setTimeout( [string | function] code, interval);
                       clearTimeout([number] intervalId);

1 <body>
 2 <input type="button" value="closeTimerId" id="btn">
 3 <script>
 4     var btn = document.getElementById("btn");
 5     var timerId = setTimeout(function () { 6         alert("23333");
 7 }, 3000);
 8 btn.onclick = function () { //在設置的時間以前(3s內)點擊能夠取消定時器
 9 clearTimeout(timerId); 10 } 11 </script>
12 </body>

 定時執行     var timerId = setInterval(code, interval);
 clearInterval(timerId);     //清除定時器

 倒計時案例:

1 <body>
 2 <input type="button" value="倒計時開始10" id="btn" disabled/>
 3 <script>
 4     var btn = document.getElementById("btn");
 5     var num = 10;
 6     var timerId = setInterval(function () { 7         num--;
 8 btn.value = "到時器開始" + num; 9         if (num == 0) { 10 clearInterval(timerId); 11 btn.disabled = false; 12 btn.value = "贊成,能夠點了"; 13 } 14     },1000); 15 </script>    
16 </body>

2.offset系列方法

offset示意圖

3.scroll系列方法

scroll示意圖

4.client系列

clientX和clientY     獲取鼠標在可視區域的位置     clientX = width + padding,clientY = height + padding

clientLeft     邊框的寬度,如有滾動條的話,包括滾動條

client示意圖

例: 得到頁面可視區域的大小

1 function client() { 
2 return { 
3 clientWidth: window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth || 0;
 4 clientHeight: window.innerHeight || document.body.clientHeitght || document.documentElement.clientHeight || 0; 
5                  };
 6 }

5.事件參數e

當事件發生的時候,系統會自動的給事件處理函數傳遞一個參數,會提供事件相關的一些數據,事件參數e瀏覽器的兼容性檢測: e = e || window.event

6.得到計算後樣式的方法

7.事件補充

  • 註冊事件
  • 註冊事件的性能問題
  • 移除事件
  • 事件冒泡
  • 事件捕獲  事件的三個階段
  • 事件對象的常見屬性

DOM筆記裏有提到註冊事件和移除事件,這裏着重講事件對象,事件對象的常見屬性

 7.1 target 和currentTarget

 7.2 事件冒泡

用addEventListener註冊事件的時候,第三個參數是false,便是冒泡。

冒泡的好處 - 事件委託

從一個例子中說明

1 <body>
 2 <ul id="ul">
 3     <li>我是第1個li標籤</li>
 4     <li>我是第2個li標籤</li>
 5     <li>我是第3個li標籤</li>
 6     <li>我是第4個li標籤</li>
 7 </ul>
 8 <input type="button" value="insertLi" id="btn">
 9 <script>
10     var ul = document.getElementById("ul"); 11     var btn = document.getElementById("btn"); 12 //把原本應該給li註冊的事件,委託給ul,只須要給一個元素註冊事件
13 //動態建立的li,也會執行預期的效果
14     ul.addEventListener("click", test, false); //註冊點擊事件
15 btn.onclick = function () { //點擊一樣會有alert
16         var li = document.createElement("li"); 17 li.innerHTML = "我是新插入的li標籤"; 18 ul.appendChild(li); 19 }; 20 //函數寫在註冊事件代碼以外,提升性能
21     function test(e) { 22 alert(e.target.innerText); 23 } 24 </script>
25 </body>

當事件冒泡影響到了其餘功能的實現時,須要阻止冒泡     

 阻止默認行爲的執行

看一下阻止跳轉到百度的例子:

1 <body>
 2     <a href="http://www.baidu.com" id="link">百度</a>
 3 <script>
 4     var link = document.getElementById("link");
 5     link.addEventListener("click", fn, false);
 6     function fn(e) { 7         e.preventDefault();
 8         //若用return false; 不起做用,若用link.onclick = function();return false能夠阻止
 9 } 10 </script>
11 </body>

 7.3 鼠標事件的參數

還有7.2中的取消事件冒泡和阻止默認行爲的執行

8.正則表達式

定義:

正則表達式是對字符串操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。

規則:

 8.1 正則表達式對象RegExp

1 <body>
2     <a href="http://www.baidu.com" id="link">百度</a>
3 <script>
4 // var regularExpression =  new RegExp("\\d");     //第一種寫法
5     var regularExpression = /\d/; //第二種寫法
6     var str = "adfj23dald"; 7 console.log(regularExpression.test(str)); //test就是匹配方法,結果是true
8 </script>
9 </body>

8.2 正則之匹配

例:驗證電子郵箱

//驗證電子郵箱
    // abc@sohu.com
    // 11111@qq.com
    // aaaaa@163.com
    // abc@sina.com.cn 
     var reg = /^\w+@\w+\.\w+(\.\w+)?$/;
     var str = "abc@sina.com.cn";
     console.log(reg.test(str));

 8.3 正則之提取

例:找數字

1 var str = "張三: 1000,李四:5000,王五:8000。"; 
2 var reg = /\d+/g; 
3 //默認狀況下,找到第一個匹配的結果就返回,後面加個g,就是全局找
 4 var arr = str.match(reg); 
5 console.log(arr);</pre>

 8.4 正則之替換

例:全部的逗號替換成句號

1 var str = "abc,efg,123,abc,123,a"; 
2 str = str.replace(/,/g,".");
 3 console.log(str);</pre>

   8.5 正則的分組( )

  在正則表達式中用( )把要分到一組的內容括起來,組分別是RegExp.$1    RegExp.$2等等

例:交換位置  源字符串"5=a, 6=b, 7=c"  要的結果"a=5, b=6, c=7"

1 var str = "5=a, 6=b, 7=c"; 
2 str = str.replace(/(\d+)=(\w+)/g, "$2=$1"); 
3console.log(str);

9.鍵盤事件對象

例:在切換鼠標焦點時,用enter鍵代替tab鍵

1 <body>
 2 <input type="text"><input type="text"><input id="t1" type="text"><input type="text"><input type="text"><input type="text"><inputtype="text"><input type="text"><input type="text"><input type="text">
 3 <script>
 4     var inputs = document.body.getElementsByTagName("input");
 5     for(var i = 0, length = inputs.length; i < length ; i++) {
 6         var input = inputs[i]; 7         //回車鍵的keyCode是13
 8         if(input.type === "text") {
 9             //按下回車,讓下一個文本框得到焦點
10 input.onkeydown = function (e) { 11                 if(e.keyCode === 13) { 12                     this.nextElementSibling.focus();//focus() 他觸發了onfocus事件
13 } 14 } 15 } 16 } 17 </script>
18 </body>

補充:js中的instanceof運算符介紹

判斷某個變量是否是某種類型的對象

1 var num = 5;
 2 var arr = []; 
3 console.log(num instanceof Array);          //false
 4 console.log(arr instanceof Array);            //true</pre>
相關文章
相關標籤/搜索