1. 程式人生 > >深入分析dwr中的DWRUtil.$

深入分析dwr中的DWRUtil.$

 為了更好的使用dwr的util.js,瞭解 $是必須的

/**
 * Find the element in the current HTML document with the given id or ids
 * @see http://getahead.ltd.uk/dwr/browser/util/$
 */
var $;

//如果瀏覽器支援document.getElementById那麼進入下面的if塊
//IE和firefox都是支援的
if (!$ && document.getElementById) {
 //將$定義為一個函式
  $ = function() {
    //定義一個數組
    var elements = new Array();
    //遍歷$函式傳入的引數

    for (var i = 0; i < arguments.length; i++) {
      var element = arguments[i];
       //如果引數型別為string,那麼通過document.getElementById(element);得到一個物件否折無需轉化
      if (typeof element == 'string') {
        element = document.getElementById(element);
      }
      
      //如果引數只有一個那麼直接返回引數或者document.getElementById(element);函式結束

    
      if (arguments.length == 1) {
        return element;
      }
       //否則將引數物件或經過轉化的物件放入陣列
      elements.push(element);
    }
    //引數為多個,則返回陣列
    return elements;
  }
}
//倘若瀏覽器不支援document.getElementById,那麼判斷是否支援document.all的用法,如果支援則進入下面////的程式碼段,程式碼段裡面的內容和上面的if段雷同,就不再贅述了
//IE支援document.all,但在firefox下不好用

else if (!$ && document.all) {
  $ = function() {
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++) {
      var element = arguments[i];
      if (typeof element == 'string') {
        element = document.all[element];
      }
      if (arguments.length == 1) {
        return element;
      }
      elements.push(element);
    }
    return elements;
  }
}

總結
1) 作者通過使用$函式使程式碼能跨瀏覽器支援,也就是說你甚至可以使用$(id)或者$(name)的方式獲取物件
    (如果瀏覽器不支援document.getElementById而只支援document.getElementById,使用$(name)是合適的),作者在原始碼也都是這樣使用的
2)作者在原始碼中大量使用$(x),如果x為string(通常是個id),那麼返回該id代表的物件,否則直接返回該物件
3) 注意在頁面中必須謹慎使用$,不要使用$作為變數 ,很有可能回覆蓋前面的函式定義,到時候可能會有奇怪的現象發生