日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript DOM操作 提高篇

發布時間:2023/12/10 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript DOM操作 提高篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  做為一個web前端,處理和了解瀏覽器差異一個重要問題.下面將介紹本人在工作中的一些筆記總結,先介紹沒有使用js庫的情況。

  1.  setAttribute方法設置元素類名 : 在jQuery中,直接使用attr()方法即可,可在原生的JS中

element.setAttribute('class','newClassName') //這個是W3C的標準,在兼容W3C標準的瀏覽器中有效,可是,IE才是國內用戶的主旋律
element.setAttribute('className','newClassName') //這樣的設置在IE中才能有效
element.className = 'newClassName' //所有瀏覽器有效(只要支持javascript)

  好了,開篇說完了,這篇文章的目的也就是介紹瀏覽器差異的同時使前端的朋友們了解如果用最有效的方法去解決問題,下面繼續。

  2.  FireFox沒有window.event對象,只有event對象,IE里只支持window.event,而其他主流瀏覽器兩者都支持,所以一般寫成:

function handle(e)
{
e = e || event;
...
}

  3.  DOMContentLoaded事件原理:對window.onload事件是當頁面解析/DOM樹建立完成,并完成了如圖片、腳本、樣式表等所有資源的下載后才觸發的。這對于很多實際的應用而言有點太“遲”了,比較影響用戶體驗。為了解決這個問題,FF中便增加了一個DOMContentLoaded方法,與onload相比,該方法觸發的時間更早,它是在頁面的DOM內容加載完成后即觸發,而無需等待其他資源的加載(這個也就是jquery.ready()事件的實現原理)。

//以下是jQuery 1.4.2版本的原版分析


bindReady: function() {
  if ( readyBound ) {
    return;
  }
  readyBound = true;
  // Catch cases where $(document).ready() is called after the
  // browser event has already occurred.
  if ( document.readyState === "complete" ) {
    return jQuery.ready();
  }
  // Mozilla, Opera and webkit nightlies currently support this event
  if ( document.addEventListener ) {
  // Use the handy event callback
    document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
    // A fallback to window.onload, that will always work
    window.addEventListener( "load", jQuery.ready, false );
    // If IE event model is used
  } else if ( document.attachEvent ) {
    // ensure firing before onload,
    // maybe late but safe also for iframes
    document.attachEvent("onreadystatechange", DOMContentLoaded);
    // A fallback to window.onload, that will always work
    window.attachEvent( "onload", jQuery.ready );
    // If IE and not a frame
    // continually check to see if the document is ready
    var toplevel = false;
    try {
      toplevel = window.frameElement == null;
    } catch(e) {}
    if ( document.documentElement.doScroll && toplevel ) {
      doScrollCheck();
    }
  }
}

  設計思路 - 將Webkit與Firefox同等對待,都是直接注冊DOMContentLoaded事件,但是由于Webkit是在525以上版本才引入的,因此存在兼容性的隱患。 對于IE,首先注冊document的onreadystatechange事件,經測試,該方式與window.onload相當,依然會等到所有資源下載完畢后才觸發。 之后,判斷如果是IE并且頁面不在iframe當中,則通過setTiemout來不斷的調用documentElement的doScroll方法,直到調用成功則出觸發DOMContentLoaded。1 jQuery對于IE的解決方案的原理是,在IE下,DOM的某些方法只有在DOM解析完成后才可以調用,doScroll就是這樣一個方法,反過來當能調用doScroll的時候即是DOM解析完成之時,與prototype中的document.write相比,該方案可以解決頁面有iframe時失效的問題。此外,jQuery似乎擔心當頁面處于iframe中時,該方法會失效,因此實現代碼中做了判斷,如果是在iframe中則通過document的onreadystatechange來實現,否則通過doScroll來實現。不過經測試,即使是在iframe中,doScroll依然有效。

  4.  學會使用IE的條件注釋。許多前端總是在抱怨萬惡的IE,確實,處理兼容性的問題確實會越來越惡心,可是沒有辦法,既然沒有辦法改變,那么請享受...

<!--[if IE]>
<h1>您正在使用IE瀏覽器</h1>
<![endif]-->
<!--[if IE 5]>
<h1>版本 5</h1>
<![endif]-->
<!--[if IE 5.0]>
<h1>版本 5.0</h1>
<![endif]-->
<!--[if IE 5.5]>
<h1>版本 5.5</h1>
<![endif]-->
<!--[if IE 6]>
<h1>版本 6</h1>
<![endif]-->
<!--[if IE 7]>
<h1>版本 7</h1>
<![endif]-->

  今天就先總結到這里吧,下周收假回來有時間發高級AJAX篇,希望能對新手或者有需要的人有所幫助.由于文筆有限,寫的不好也請見諒,這個剛剛開始寫博客,成長階段嘛。哈哈...

總結

以上是生活随笔為你收集整理的JavaScript DOM操作 提高篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。