前端學習之旅——Jquery

  • jquery介紹

    jQuery是目前使用最廣泛的javascript函數庫。據統計,全世界排名前100萬的網站,有46%使用jQuery,遠遠超過其他庫。微軟公司甚至把jQuery作爲他們的官方庫。

    jQuery的版本分爲1.x系列和2.x、3.x系列,1.x系列兼容低版本的瀏覽器,2.x、3.x系列放棄支持低版本瀏覽器,目前使用最多的是1.x系列的。

    jquery是一個函數庫,一個js文件,頁面用script標籤引入這個js文件就可以使用。

    <script type="text/javascript" src="js/jquery-1.12.2.js"></script>
    

    jquery的口號和願望 Write Less, Do More(寫得少,做得多)

    • 1、http://jquery.com/ 官方網站
    • 2、https://code.jquery.com/ 版本下載

  • jquery加載

    將獲取元素的語句寫到頁面頭部,會因爲元素還沒有加載而出錯,jquery提供了ready方法解決這個問題,它的速度比原生的 window.onload 更快。

    <script type="text/javascript">
    
    $(document).ready(function(){
    
         ......
    
    });
    
    </script>
    

    可以簡寫爲:

    <script type="text/javascript">
    
    $(function(){
    
         ......
    
    });
    
    </script>
    

  • jquery選擇器

    • jquery用法思想

      選擇某個網頁元素,然後對它進行某種操作

    • jquery選擇器

      jquery選擇器可以快速地選擇元素,選擇規則和css樣式相同,使用length屬性判斷是否選擇成功。

      $('#myId') //選擇id爲myId的網頁元素
      $('.myClass') // 選擇class爲myClass的元素
      $('li') //選擇所有的li元素
      $('#ul1 li span') //選擇id爲爲ul1元素下的所有li下的span元素
      $('input[name=first]') // 選擇name屬性等於first的input元素
      
    • 對選擇集進行過濾

      $('div').has('p'); // 選擇包含p元素的div元素
      $('div').not('.myClass'); //選擇class不等於myClass的div元素
      $('div').filter('.myClass'); //選擇class等於myClass的div元素
      $('div').eq(5); //選擇第6個div元素
      
    • 選擇集轉移

      $('div').prev(); //選擇div元素前面緊挨的同輩元素
      $('div').prevAll(); //選擇div元素之前所有的同輩元素
      $('div').next(); //選擇div元素後面緊挨的同輩元素
      $('div').nextAll(); //選擇div元素後面所有的同輩元素
      $('div').parent(); //選擇div的父元素
      $('div').children(); //選擇div的所有子元素
      $('div').siblings(); //選擇div的同級元素
      $('div').find('.myClass'); //選擇div內的class等於myClass的元素
      
    • 判斷是否選擇到了元素

    jquery有容錯機制,即使沒有找到元素,也不會出錯,可以用length屬性來判斷是否找到了元素,length等於0,就是沒選擇到元素,length大於0,就是選擇到了元素。

    var $div1 = $('#div1');
    var $div2 = $('#div2');
    alert($div1.length); // 彈出1
    alert($div2.length); // 彈出0
    ......
    <div id="div1">這是一個div</div>
    

  • jquery樣式操作

    • jquery用法思想

      同一個函數完成取值和賦值

    • 操作行間樣式

      // 獲取div的樣式
      $("div").css("width");
      $("div").css("color");
      
      //設置div的樣式
      $("div").css("width","30px");
      $("div").css("height","30px");
      $("div").css({fontSize:"30px",color:"red"});
      
    • 特別注意
      選擇器獲取的多個元素,獲取信息獲取的是第一個,比如:$(“div”).css(“width”),獲取的是第一個div的width。

    • 操作樣式類名

      $("#div1").addClass("divClass2") //爲id爲div1的對象追加樣式divClass2
      $("#div1").removeClass("divClass")  //移除id爲div1的對象的class名爲divClass的樣式
      $("#div1").removeClass("divClass divClass2") //移除多個樣式
      $("#div1").toggleClass("anotherClass") //重複切換anotherClass樣式
      
    • 獲取元素的索引值

      有時候需要獲得匹配元素相對於其同胞元素的索引位置,此時可以用index()方法獲取

      var $li = $('.list li').eq(1);
      alert($li.index()); // 彈出1
      ......
      <ul class="list">
          <li>1</li>
          <li>2</li>
          <li>4</li>
          <li>5</li>
          <li>6</li>
      </ul>
      

  • jquery特殊效果

    fadeIn() 淡入
    
        $btn.click(function(){
    
            $('#div1').fadeIn(1000,'swing',function(){
                alert('done!');
            });
    
        });
    
    fadeOut() 淡出
    fadeToggle() 切換淡入淡出
    hide() 隱藏元素
    show() 顯示元素
    toggle() 切換元素的可見狀態
    slideDown() 向下展開
    slideUp() 向上捲起
    slideToggle() 依次展開或捲起某個元素
    

  • jquery鏈式調用

    jquery對象的方法會在執行完後返回這個jquery對象,所有jquery對象的方法可以連起來寫:

    $('#div1') // id爲div1的元素
    .children('ul') //該元素下面的ul子元素
    .slideDown('fast') //高度從零變到實際高度來顯示ul元素
    .parent()  //跳到ul的父元素,也就是id爲div1的元素
    .siblings()  //跳到div1元素平級的所有兄弟元素
    .children('ul') //這些兄弟元素中的ul子元素
    .slideUp('fast');  //高度實際高度變換到零來隱藏ul元素
    

  • jquery動畫

    通過animate方法可以設置元素某屬性值上的動畫,可以設置一個或多個屬性值,動畫執行完成後會執行一個函數。

    $('#div1').animate({
        width:300,
        height:300
    },1000,'swing',function(){
        alert('done!');
    });
    

    參數可以寫成數字表達式:

    $('#div1').animate({
        width:'+=100',
        height:300
    },1000,'swing',function(){
        alert('done!');
    });
    

  • 尺寸相關、滾動事件

    • 1、獲取和設置元素的尺寸

      width()、height()    獲取元素width和height  
      innerWidth()、innerHeight()  包括padding的width和height  
      outerWidth()、outerHeight()  包括padding和border的width和height  
      outerWidth(true)、outerHeight(true)   包括padding和border以及margin的width和height
      
    • 2、獲取元素相對頁面的絕對位置

      offset()
      
    • 3、獲取瀏覽器可視區寬度高度

      $(window).width();
      $(window).height();
      
    • 4、獲取頁面文檔的寬度高度

      $(document).width();
      $(document).height();
      
    • 5、獲取頁面滾動距離

      $(document).scrollTop();  
      $(document).scrollLeft();
      
    • 6、頁面滾動事件

      $(window).scroll(function(){  
          ......  
      })
      

  • jquery屬性操作

    • 1、html() 取出或設置html內容

      // 取出html內容
      
      var $htm = $('#div1').html();
      
      // 設置html內容
      
      $('#div1').html('<span>添加文字</span>');
      
    • 2、prop() 取出或設置某個屬性的值

      // 取出圖片的地址
      
      var $src = $('#img1').prop('src');
      
      // 設置圖片的地址和alt屬性
      
      $('#img1').prop({src: "test.jpg", alt: "Test Image" });
      

  • jquery循環

    對jquery選擇的對象集合分別進行操作,需要用到jquery循環操作,此時可以用對象上的each方法:

    $(function(){
        $('.list li').each(function(i){
            $(this).html(i);
        })
    })
    ......
    <ul class="list">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    

  • jquery事件

    • 事件函數列表:

      blur() 元素失去焦點
      focus() 元素獲得焦點
      click() 鼠標單擊
      mouseover() 鼠標進入(進入子元素也觸發)
      mouseout() 鼠標離開(離開子元素也觸發)
      mouseenter() 鼠標進入(進入子元素不觸發)
      mouseleave() 鼠標離開(離開子元素不觸發)
      hover() 同時爲mouseenter和mouseleave事件指定處理函數
      ready() DOM加載完成
      resize() 瀏覽器窗口的大小發生改變
      scroll() 滾動條的位置發生變化
      submit() 用戶遞交表單
      
    • 綁定事件的其他方式

      $(function(){
          $('#div1').bind('mouseover click', function(event) {
              alert($(this).html());
          });
      });
      
    • 取消綁定事件

      $(function(){
          $('#div1').bind('mouseover click', function(event) {
              alert($(this).html());
      
              // $(this).unbind();
              $(this).unbind('mouseover');
      
          });
      });
      

  • 事件冒泡

    • 什麼是事件冒泡?

      在一個對象上觸發某類事件(比如單擊onclick事件),如果此對象定義了此事件的處理程序,那麼此事件就會調用這個處理程序,如果沒有定義此事件處理程序或者事件返回true,那麼這個事件會向這個對象的父級對象傳播,從裏到外,直至它被處理(父級對象所有同類事件都將被激活),或者它到達了對象層次的最頂層,即document對象(有些瀏覽器是window)。

    • 事件冒泡的作用

      事件冒泡允許多個操作被集中處理(把事件處理器添加到一個父級元素上,避免把事件處理器添加到多個子級元素上),它還可以讓你在對象層的不同級別捕獲事件。

    • 阻止事件冒泡

      事件冒泡機制有時候是不需要的,需要阻止掉,通過 event.stopPropagation() 來阻止

      $(function(){
          var $box1 = $('.father');
          var $box2 = $('.son');
          var $box3 = $('.grandson');
          $box1.click(function() {
              alert('father');
          });
          $box2.click(function() {
              alert('son');
          });
          $box3.click(function(event) {
              alert('grandson');
              event.stopPropagation();
      
          });
          $(document).click(function(event) {
              alert('grandfather');
          });
      })
      
      ......
      
      <div class="father">
          <div class="son">
              <div class="grandson"></div>
          </div>
      </div>
      
    • 阻止默認行爲

      阻止表單提交

      $('#form1').submit(function(event){
          event.preventDefault();
      })
      
    • 合併阻止操作

      實際開發中,一般把阻止冒泡和阻止默認行爲合併起來寫,合併寫法可以用

      // event.stopPropagation();
      // event.preventDefault();
      
      // 合併寫法:
      return false;
      

  • 事件委託

    事件委託就是利用冒泡的原理,把事件加到父級上,通過判斷事件來源的子集,執行相應的操作,事件委託首先可以極大減少事件綁定次數,提高性能;其次可以讓新加入的子元素也可以擁有相同的操作。

    • 一般綁定事件的寫法

      $(function(){
          $ali = $('#list li');
          $ali.click(function() {
              $(this).css({background:'red'});
          });
      })
      ...
      <ul id="list">
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
      </ul>
      
    • 事件委託的寫法

      $(function(){
          $list = $('#list');
          $list.delegate('li', 'click', function() {
              $(this).css({background:'red'});
          });
      })
      ...
      <ul id="list">
          <li>1</li>
          <li>2</li>
          <li>3</li>
          <li>4</li>
          <li>5</li>
      </ul>
      

  • jquery元素節點操作

    • 創建節點

      var $div = $('<div>');
      var $div2 = $('<div>這是一個div元素</div>');
      
    • 插入節點

      • 1、append()和appendTo():在現存元素的內部,從後面插入元素

        var $span = $('<span>這是一個span元素</span>');
        $('#div1').append($span);
        ......
        <div id="div1"></div>
        
      • 2、prepend()和prependTo():在現存元素的內部,從前面插入元素

      • 3、after()和insertAfter():在現存元素的外部,從後面插入元素

      • 4、before()和insertBefore():在現存元素的外部,從前面插入元素

      • 刪除節點

        $('#div1').remove();
        

  • 滾輪事件與函數節流

    • jquery.mousewheel插件使用

      jquery中沒有鼠標滾輪事件,原生js中的鼠標滾輪事件不兼容,可以使用jquery的滾輪事件插件jquery.mousewheel.js。

    • 函數節流

      javascript中有些事件的觸發頻率非常高,比如onresize事件(jq中是resize),onmousemove事件(jq中是mousemove)以及上面說的鼠標滾輪事件,在短事件內多處觸發執行綁定的函數,可以巧妙地使用定時器來減少觸發的次數,實現函數節流。


  • json

    json是 JavaScript Object Notation 的首字母縮寫,單詞的意思是javascript對象表示法,這裏說的json指的是類似於javascript對象的一種數據格式,目前這種數據格式比較流行,逐漸替換掉了傳統的xml數據格式。

    javascript自定義對象:

    var oMan = {
        name:'tom',
        age:16,
        talk:function(s){
            alert('我會說'+s);
        }
    }
    
  • json格式的數據:

    {
        "name":"tom",
        "age":18
    }
    

    與json對象不同的是,json數據格式的屬性名稱和字符串值需要用雙引號引起來,用單引號或者不用引號會導致讀取數據錯誤。

    json的另外一個數據格式是數組,和javascript中的數組字面量相同。

    ["tom",18,"programmer"]
    

  • ajax與jsonp

    ajax技術的目的是讓javascript發送http請求,與後臺通信,獲取數據和信息。ajax技術的原理是實例化xmlhttp對象,使用此對象與後臺通信。ajax通信的過程不會影響後續javascript的執行,從而實現異步。

    • 同步和異步

      現實生活中,同步指的是同時做幾件事情,異步指的是做完一件事後再做另外一件事,程序中的同步和異步是把現實生活中的概念對調,也就是程序中的異步指的是現實生活中的同步,程序中的同步指的是現實生活中的異步。

    • 局部刷新和無刷新

      ajax可以實現局部刷新,也叫做無刷新,無刷新指的是整個頁面不刷新,只是局部刷新,ajax可以自己發送http請求,不用通過瀏覽器的地址欄,所以頁面整體不會刷新,ajax獲取到後臺數據,更新頁面顯示數據的部分,就做到了頁面局部刷新。

    • 同源策略

      ajax請求的頁面或資源只能是同一個域下面的資源,不能是其他域的資源,這是在設計ajax時基於安全的考慮。特徵報錯提示:

      XMLHttpRequest cannot load https://www.baidu.com/. No  
      'Access-Control-Allow-Origin' header is present on the requested resource.  
      Origin 'null' is therefore not allowed access.
      
    • $.ajax使用方法

      1、url 請求地址
      2、type 請求方式,默認是’GET’,常用的還有’POST’
      3、dataType 設置返回的數據格式,常用的是’json’格式,也可以設置爲’html’
      4、data 設置發送給服務器的數據
      5、success 設置請求成功後的回調函數
      6、error 設置請求失敗後的回調函數
      7、async 設置是否異步,默認值是’true’,表示異步

    • 以前的寫法:

      $.ajax({
          url: 'js/data.json',
          type: 'GET',
          dataType: 'json',
          data:{'aa':1}
          success:function(data){
              alert(data.name);
          },
          error:function(){
              alert('服務器超時,請重試!');
          }
      });
      
    • 新的寫法(推薦):

      $.ajax({
          url: 'js/data.json',
          type: 'GET',
          dataType: 'json',
          data:{'aa':1}
      })
      .done(function(data) {
          alert(data.name);
      })
      .fail(function() {
          alert('服務器超時,請重試!');
      });
      
      // data.json裏面的數據: {"name":"tom","age":18}
      
    • jsonp

      ajax只能請求同一個域下的數據或資源,有時候需要跨域請求數據,就需要用到jsonp技術,jsonp可以跨域請求數據,它的原理主要是利用了

$.ajax({
    url:'js/data.js',
    type:'get',
    dataType:'jsonp',
    jsonpCallback:'fnBack'
})
.done(function(data){
    alert(data.name);
})
.fail(function() {
    alert('服務器超時,請重試!');
});

// data.js裏面的數據: fnBack({"name":"tom","age":18});


  • 本地存儲

    本地存儲分爲cookie,以及新增的localStorage和sessionStorage

    • 1、cookie 存儲在本地,容量最大4k,在同源的http請求時攜帶傳遞,損耗帶寬,可設置訪問路徑,只有此路徑及此路徑的子路徑才能訪問此cookie,在設置的過期時間之前有效。

      jquery 設置cookie
      $.cookie('mycookie','123',{expires:7,path:'/'});
      jquery 獲取cookie
      $.cookie('mycookie');
      
    • 2、localStorage 存儲在本地,容量爲5M或者更大,不會在請求時候攜帶傳遞,在所有同源窗口中共享,數據一直有效,除非人爲刪除,可作爲長期數據。

      //設置:
      localStorage.setItem("dat", "456");
      localStorage.dat = '456';
      
      //獲取:
      localStorage.getItem("dat");
      localStorage.dat
      
      //刪除
      localStorage.removeItem("dat");
      
    • 3、sessionStorage 存儲在本地,容量爲5M或者更大,不會在請求時候攜帶傳遞,在同源的當前窗口關閉前有效。

      localStorage 和 sessionStorage 合稱爲Web Storage , Web Storage支持事件通知機制,可以將數據更新的通知監聽者,Web Storage的api接口使用更方便。

      iPhone的無痕瀏覽不支持Web Storage,只能用cookie。


end…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章