javascript中BOM部分基礎知識總結

来源:http://www.cnblogs.com/2010master/archive/2016/08/31/5824215.html
-Advertisement-
Play Games

一、什麼是BOM BOM(Browser Object Document)即瀏覽器對象模型。 BOM提供了獨立於內容 而與瀏覽器視窗進行交互的對象; 由於BOM主要用於管理視窗與視窗之間的通訊,因此其核心對象是window; BOM由一系列相關的對象構成,並且每個對象都提供了很多方法與屬性; BOM ...


一、什麼是BOM      BOM(Browser Object Document)即瀏覽器對象模型。      BOM提供了獨立於內容 而與瀏覽器視窗進行交互的對象;      由於BOM主要用於管理視窗與視窗之間的通訊,因此其核心對象是window;      BOM由一系列相關的對象構成,並且每個對象都提供了很多方法與屬性;      BOM缺乏標準,JavaScript語法的標準化組織是ECMA,DOM的標準化組織是W3C,BOM最初是Netscape瀏覽器標準的一部分。   二、學習BOM學什麼      我們將學到與瀏覽器視窗交互的一些對象,例如可以移動、調整瀏覽器大小的window對象,可以用於導航的location對象與history對象,可以獲取瀏覽器、操作系統與用戶屏幕信息的navigator與screen對象,可以使用document作為訪問HTML文檔的入口,管理框架的frames對象等。在這裡,只介紹一些window對象等的基礎知識,其中會有一些ECMAscript的知識還會說明。其他對象Location、Screen、Navigator、History不一一詳細介紹了。。   BOM結構圖   三、window對象      window對象是js中的頂級對象,所有定義在全局作用域中的變數、函數都會變成window對象的屬性和方法,在調用的時候可以省略window。           例:打開視窗 window.open(url,target,param);                // url 要打開的地址      //target  新視窗的位置   _blank  _self  _parent(父框架)      //param  新視窗的一些設置      //返回值,新視窗的句柄           關閉視窗:window.close();  
四、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系列方法  
offsetWidth和offsetHeight offsetHeight的構成 offsetHeight = height + padding + border offsetWidth相同
  offsetHeight和style.height的區別 1. demo.style.height只能獲取行內樣式,否則無法獲取到 2. .style.height是字元串(有單位px), offsetHeight是數值(無單位) 3. .style.height可以設置行內樣式,但offsetHeight是只讀屬性,不可設置 所以:demo.style.height獲取 某元素的真實高度/寬度,用.style.height來設置高度/寬度
offsetLeft和offsetTop offsetLeft的構成 1,到距離自身最近的(帶有定位的)父元素的 左側/頂部 2,如果所有父級元素都沒有定位,則以body為準 3,offsetLeft是自身border左側到父級padding左側的距離
  offsetLeft和style.left的區別 1,style.left只能獲取行內樣式 2,offsetLeft只讀,style.left可讀可寫 3,offsetLeft是數值,style.left是字元串並且有單位px 4,如果沒有定位,style.left獲取的數值可能是無效的 5,最大的區別:offsetLeft以border左上角為基準, style.left以margin左上角為基準
offsetParent 構成 1. 返回該對象距離最近的帶有定位的父級元素 2. 如果當前元素的所有父級元素都沒有定位(position為absolute或relative),那麼offsetParent為body 3. offsetLeft獲取的就是相對於offsetParent的距離
  與parentNode的區別 parentNode始終指向的是當前元素的最近的父元素,無論定位與否
  offset示意圖   3.scroll系列方法  
scrollHeight和scrollWidth 對象內部的實際內容的高度/寬度(不包括border)
scrollTop和scrollLeft 被捲去部分的頂部/左側 到 可視區域 頂部/左側 的距離
onscroll事件 滾動條滾動觸發的事件
頁面滾動坐標 var scrollTop = window.pageYoffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  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  
e.pageX和e.pageY 獲取滑鼠在頁面中的位置(IE8中不支持pageX和pageY,支持window.event獲取參數事件) pageX = clientX + 頁面滾動出去的距離
  6.獲得計算後樣式的方法  
w3c標準 window.get ComputedStyle(element, null)[屬性]
IE瀏覽器 element.currentStyle[屬性]
封裝瀏覽器相容性函數 function getStyle(element, attr) {         if(window.getComputedStyle) {             return window.getComputedStyle(element, null)[attr];         } else {             return element.currentStyle[attr];         }     }
  7.事件補充
  • 註冊事件
  • 註冊事件的性能問題
  • 移除事件
  • 事件冒泡
  • 事件捕獲  事件的三個階段
  • 事件對象的常見屬性
DOM筆記里有提到註冊事件和移除事件,這裡著重講事件對象,事件對象的常見屬性      7.1 target 和currentTarget  
target 始終是點擊的元素(IE8及之前是srcElement)
currentTarget 執行事件處理函數的元素
this 始終和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>

    

     當事件冒泡影響到了其他功能的實現時,需要阻止冒泡       
e.stopPropagation( ) IE8及之前:   event.cancleBubble = true;
           阻止預設行為的執行  
e.preventDefault() IE8及之前:  event.returnValue = false;
看一下阻止跳轉到百度的例子:
 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 滑鼠事件的參數  
e.type 事件的類型,如click,mouseover
事件的3個階段 1 捕獲階段 2 目標階段 3 冒泡階段
e.eventPhase 事件階段
shiftKey/ctrlKey/altKey 按下滑鼠同時按下組合鍵
button 獲取滑鼠的按鍵
e.clientX和e.clientY 獲取滑鼠在可視區域的位置
還有7.2中的取消事件冒泡和阻止預設行為的執行   8.正則表達式      定義:      正則表達式是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字元串”,這個“規則字元串”用來表達對字元串的一種過濾邏輯。        規則:  
1 元字元         .   匹配任何單個字元,除了換行         d  數字   \D 非數字       [0-9]         w  數字 字母 下劃線   \W 非     [0-9a-zA-Z_]         \s  空白   \S 非空白         \n  換行         \t  製表符
2 範圍-- 匹配的是一個字元 [0-9]  [0123]  [a-z]  [A-Z]  匹配的是一個字元
3 | 或者 | 或者
4 量詞  -只修飾一個字元         a+  1個或多個a         a?   1個或0個a         a*   0個或多個a    a{x}  x個n    a{x,} 至少x個a    a{x,y}  x-y個a
5 開始結束           ^a  以a開始           a$  以a結束
6 ( ) 看成是一個整體,即分組  
7 匹配漢字 [\u4e00-\u9fa5]
8 參數 i  忽略大小寫 g 全局匹配
9 ^在[ ]中的作用——取反  
10 貪婪模式和非貪婪模式 預設情況  貪婪模式  <.+>                非貪婪模式  <.+?>
   
       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 正則之匹配 例:驗證電子郵箱
//驗證電子郵箱
    // [email protected]
    // [email protected]
    // [email protected]
    // [email protected] 
     var reg = /^\w+@\w+\.\w+(\.\w+)?$/;
     var str = "[email protected]";
     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);

 

         8.4 正則之替換 例:所有的逗號替換成句號
1 var str = "abc,efg,123,abc,123,a";
2 str = str.replace(/,/g,".");
3 console.log(str);
        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.鍵盤事件對象  
方法 keydown  按下時 keypress  按下 keyup  抬起時 屬性   keyCode  鍵盤碼,只有數字和字母對應ASCII碼 charCode  對應ASCII碼,只有在keypress中才生效(IE9+)
例:在切換滑鼠焦點時,用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

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、面向過程 VS 面向對象 編程範式 編程是程式員用特定的語法+數據結構+演算法組成的代碼來告訴電腦如何執行任務的過程 ,一個程式是程式員為了得到一個任務結果而編寫的一組指令的集合,正所謂條條大路通羅馬,實現一個任務的方式有很多種不同的方式,對這些不同的編程方式的特點進行歸納總結得出來的編程方式類 ...
  • Java 同步塊(synchronized block)用來標記方法或者代碼塊是同步的。Java 同步塊用來避免競爭。本文介紹以下內容: Java 同步關鍵字(synchronzied) 實例方法同步 靜態方法同步 實例方法中同步塊 靜態方法中同步塊 Java 同步示例 Java 同步關鍵字(syn ...
  • 1 Servlet生命周期Servlet 生命周期:Servlet 載入 >實例化 >服務 >銷毀。 init():在Servlet的生命周期中,僅執行一次init()方法。它是在伺服器裝入Servlet時執行的,負責初始化Servlet對象。可以配置伺服器,以在啟動伺服器或客戶機首次訪問Servl ...
  • 一、迭代器(iterator) 在Python中,for迴圈可以用於Python中的任何類型,包括列表、元祖等等,實際上,for迴圈可用於任何“可迭代對象”,這其實就是迭代器 迭代器是一個實現了迭代器協議的對象,Python中的迭代器協議就是有next方法的對象會前進到下一結果,而在一系列結果的末尾 ...
  • 1 <%@include file="xxx.jsp"%>為jsp中的編譯指令,其文件的包含是發生在jsp向servlet轉換的時期,而<jsp:include page="xxx.jsp">是jsp中的動作指令,其文件的包含是發生在編譯時期,也就是將java文件編譯為class文件的時期 。 2使 ...
  • 之前的幾個月在“跟誰學”平臺上錄製了一些視頻,得到了不少開發者的支持,併在實際工作中也幫助了不少人,自己當然也很開心,下麵介紹一下跟誰學課程的目錄 倉儲大叔講系統架構 專註於dotNet架構與設計 主講:倉儲大叔,洋名:Lind 博客地址:http://www.cnblogs.com/lori 套裝 ...
  • 通過瀏覽器地址欄輸入url並通過?傳遞參數請求資源時,?後面的參數叫做 "查詢字元串",會觸發後臺Servlet的doGet(),因為通過瀏覽器地址欄直接訪問的方式是GET方式。 下麵順便瞭解一下form的method屬性對傳參的影響。 原始表單:<form id="myForm"><label>用 ...
  • 註:本文使用的 angular 版本為 1.3 版 我們在後臺對數據進行json序列化時,如果數據中包含有日期,序列化後返回到前端的結果可能是這樣的: /Date(1448864369815)/ 。可是往往我們要在前臺顯示正常的日期格式,該如何處理呢?在angularjs(後面簡稱 ng)中處理起來 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...