JavaScript DOM 編程藝術筆記(4章-6章)

第四章

事件處理函數

  • 在特定事件發生時調用特定的JavaScript代碼

      event = "JavaScript statement(s)"
    
  • 有很多種事件處理函數: onload, onunload, onchange, onmouseover, onmouseout, onmousedown, onmouseup, onclick 事件,具體參見HTML DOM 事件

  • JavaScript代碼包含在一對引號直接,這對引號之間可以放置多個JavaScript語句,用“;”隔開就行

      onclick = "showPic(this)"http://this表示當前對象
    
  • 在事件處理函數被觸發之后,引號之間的JavaScript語句被執行,被調用的語句可以給這個事件處理函數返回一個值。返回true代表這個事件被觸發了,false代表沒有觸發,利用這點,可以攔截一些默認事件,比如下面這個鏈接,點擊之后由于返回的是false,瀏覽器認為這個事件沒有被觸發,所以不會發生跳轉

    <a herf="http://www.example.com" onclik="return false;">Click me</a>
    

一些常用屬性

  • childNodes屬性:用于獲取任何一個元素的所有子元素,是一個包含這個元素所有子元素的數組(子元素除了元素節點還包括很多其他節點
  • nodeType屬性:獲取一個節點的節點類型,節點類型是通過數字表示
    • 1代表元素節點
    • 2代表屬性節點
    • 3代表文本節點
  • nodeValue屬性:用于獲得一個節點的值,一般元素節點的值是null,文本節點的值是它里面的文本內容
  • firstChild屬性:獲得一個節點的第一個子節點,等同于childNodes[0]
  • lastChild屬性,獲得一個節點的最后一個子節點,等同于node.childNodes[node.childNodes.length-1]
node關系圖

第五章

平穩退化

  • 定義:讓訪問者的瀏覽器不支持JavaScript的情況下仍然可以正常訪問你的網站。

  • 例子:

      <a herf="http://www.example.com" onclik=this.href;return false;">Click me</a>
    

    即使JavaScript被禁用,上面的代碼任然可以正常跳轉

  • 盡量不要使用 JavaScript 偽協議,比如:

      <a herf="javascript:showPic('xxxx')";return false;">Click me</a>
    

    以上代碼在JavaScript失效后無法正確顯示

漸進增強

  • 定義:用一些額外信息去包裹原始數據,增強數據的效果,但不影響數據內容本身,比如 CSS 之于 HTML。

分離行為與內容

  • 可以在外部JavaScript文件里面把事件添加到 HTML 文檔中的某個元素上,而不用在 html 里面嵌入類似“onclick=xxx”之類的 JavaScript 代碼。簡單地說就是:HTML里面最好不要出現 JavaScript 代碼!

  • 方式:

      element.event = action
    
  • 例子:為所有 "a" 標簽添加popUp()函數調用:

    var links = document.getElementsByTagName("a");
    for(var i=0; i<links.length; i++){
        if(links[i].getAttribute("class") == "popup"){
            links[i].onClick = function() {
                popUp(this.getAttribute("href"));
                return false;
            }
        }
    }
    

    這樣,只要為所有a標簽添加一個"popup"的類就可以完成替換。

  • 為了保證JavaScript代碼在文檔加載完后才執行,可以把代碼打包添加到window的onload事件上去

    window.onload = prepareLinks;
    function prepareLinks(){
        var links = document.getElementsByTagName("a");
        for(var i=0; i<links.length; i++){
            if(links[i].getAttribute("class") == "popup"){
                links[i].onClick = function() {
                    popUp(this.getAttribute("href"));
                    return false;
                }
            }
        }
    }
    

對象檢測

  • 可以把某個方法打包在if語句里面,通過求值結果是否為true來判定當前瀏覽器對此方法的支持(注意不需要括號),比如:

      if(document.getElementById){
          statements using getElementById
      }
      
      //或者用非邏輯
      
      if(!document.getElementById){
          return false;
      }
    

第六章

共享onload事件

我們知道需要文檔加載完后立即執行的函數可以用window對象的onload與之關聯:

window.onload = funtion

但是每次只能綁定一個,如果綁定多個,只有最后一個會被執行,下面介紹一個方法可以綁定多個函數:

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

利用這個函數,可以把那些需要在頁面加載完后立即執行的函數創建為一個隊列:

addLoadEvent(firstFunction);
addLoadEvent(secondFunction);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容