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
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系列方法
3.scroll系列方法
4.client系列
clientX和clientY 獲取鼠標在可視區域的位置 clientX = width + padding,clientY = height + padding
clientLeft 邊框的寬度,如有滾動條的話,包括滾動條
例: 得到頁面可視區域的大小
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>