jQuery( 二)——特殊屬性操作及事件

jQuery特殊屬性操作

Class類操作

Class類方法和css方法作用相同,Class類樣式是針對內部和外部樣式表,css方法是針對行內樣式表

<script>
  $(function () {
    //1.添加類 addClass(類名);
    $('#addClass').click(function () {
      //1.1 給id爲div1的元素添加類.
      //添加單個類
      //$('#div1').addClass('fontSize30');
      //添加多個類.
      $('#div1').addClass('fontSize30 width200');
    });

    //2.移除類
    $('#removeClass').click(function () {
      //2.1 給id爲div1的元素移除類.
      //移除單個類
      //$('#div1').removeClass('fontSize30');
      //移除多個類
      //$('#div1').removeClass('fontSize30 width200');
      //移除所有的類
      $('#div1').removeClass();
    });

    //3.判斷類
    $('#hasClass').click(function () {
      //判斷一個元素有沒有某個類,如果有就返回true,如果沒有就返回false.
      console.log($('#div1').hasClass('fontSize30'));
    });


    //4.切換類(開關類)
    $('#toggleClass').click(function () {
      //如果元素有某個類就移除這個類, 如果元素沒有這類就添加這個類.
      $('#div1').toggleClass('fontSize30');
    });
  });
</script>
【案例-tab欄切換.html】
<script>
    $(function () {
        //需求:給tab欄的每一個li標籤設置鼠標移入事件: 當前li添加active類,其他的兄弟li移除active類.
        //    找到當前tab欄索引一致的div,讓他添加 selected類,其他的兄弟div移除selected類.

        //需求1
        $('.tab>.tab-item').mouseenter(function () {
            $(this).addClass('active').siblings('li').removeClass('active');

            //獲取鼠標當前移入的這個li標籤的索引
            var idx = $(this).index();

            //需求2:
            $('.products>.main').eq(idx).addClass('selected').siblings('div').removeClass('selected');
        });

    });
</script>

動畫方法:show/hide/toggle(顯示/隱藏/切換),slideDown/slideUp/slideToggle(滑入/滑出/切換),fadeIn/fadeOut/fadeToggle(淡入/淡出/切換),stop清除動畫隊列(防止多次點擊動畫排隊情況),animate(自定義動畫)

【顯示/隱藏/切換】
<script>
  $(function () {
    //1.顯示 show();
    //參數1:代表執行動畫的時長 毫秒數,也可以是代表時長的字符串 fast normal  slow
    //參數2:代表動畫執行完畢後的回調函數.
    $('#show').click(function () {
      //給id爲div1的元素動畫顯示.
      //1.1 如果show()這個方法沒有參數,那就沒有動畫效果.
      //$('#div1').show();
      //1.2 如果要想要動畫效果,就應該給他參數.
      //$('#div1').show(2000);
      $('#div1').show('fast'); //200毫秒
      //$('#div1').show('normal'); //400毫秒
      //$('#div1').show('slow'); //600毫秒
      //$('#div1').show('penglin'); //如果代表時長的單詞寫錯了,就相當於寫了一個normal
      //1.3 回調函數.
      // $('#div1').show(2000, function () {
      //   alert('動畫執行完畢了...');
      // })
    });


    //2.隱藏
    $('#hide').click(function () {
      //讓id爲div1的元素動畫影藏.
      //$('#div1').hide();//沒有參數沒有動畫效果.
      $('#div1').hide(2000);
      // $('#div1').hide(2000, function () {
      //   alert('隱藏了');
      // });
    });

    //3.切換 toggle
    //如果元素是隱藏狀態就動畫顯示; 如果元素是顯示狀態就動畫影藏.
    $('#toggle').click(function () {
      $('#div1').toggle(1000);
    });

  });
</script>
【滑入/滑出/切換】
<script>
  $(function () {
    //1.滑入 slideDown(參數1,參數2);
    //參數1: 動畫執行的時長
    //參數2: 動畫執行完畢後的回調函數
    $('#slideDown').click(function () {
      //讓id爲div1的元素滑入.
      //$('#div1').slideDown();//沒有給參數相當於給了一個默認的時長,mormal代表的400毫秒
      $('#div1').slideDown(2000);
      // $('#div1').slideDown(2000, function () {
      //   alert('滑入完成了..');
      // });
    });


    //2.滑出 slideUp();
    $('#slideUp').click(function () {
      //讓id爲div1的元素滑出
      $('#div1').slideUp(2000);
      // $('#div1').slideUp(2000, function () {
      //   alert('滑出做完了...');
      // });
    });

    //3.切換 slideToggle();
    //元素是隱藏狀態就滑入; 元素是顯示狀態就滑出.
    $('#slideToggle').click(function () {
      $('#div1').slideToggle(1000);
    });

  });
</script>
【清除動畫隊列】
<script>
  $(function () {
    //1.開始動畫:模擬一個動畫隊列
    $('#start').click(function () {
      $('div').slideDown(2000).slideUp(2000);
    });

    //2.停止動畫: 執行stop方法.
    //stop();
    // 第一個參數:是否清除隊列
    // 第二個參數:是否跳轉到最終效果
    $('#stop').click(function () {
      //$('div').stop(true,true);
      //$('div').stop(true,false);
      //$('div').stop(false,true);
      $('div').stop(false,false);

      //如果stop()方法不寫參數,默認就是兩個false.
      //$('div').stop();
    });

  });
</script>
【淡入/淡出/切換】
<script>
  $(function () {
    //1.淡入 fadeIn
    $('#fadeIn').click(function () {
      //讓id爲div1的這個元素淡入.
      //$('#div1').fadeIn(); //不給參數相當於給了一個默認的動畫時長,mormal400毫秒
      $('#div1').fadeIn(1000);
      // $('#div1').fadeIn(2000, function () {
      //   alert('淡入完成了...');
      // });
    });

    //2.淡出 fadeOut
    $('#fadeOut').click(function () {
      //讓id爲div1的這個元素淡出
      $('#div1').fadeOut(1000);
      // $('#div1').fadeOut(1000, function () {
      //   alert('淡出完成了');
      // });
    });


    //3.切換 fadeToggle
    $('#fadeToggle').click(function () {
      $('#div1').fadeToggle(1000);
    });


    //4.淡入到那裏 fadeTo
    $('#fadeTo').click(function () {
      $('#div1').fadeTo(1000,0.5);
    });

  });
</script>
【自定義動畫】
<script>
  $(function () {
    //自定義動畫 animate();
    //參數1:必選的 對象 代表的是需要做動畫的屬性
    //參數2:可選的 代表執行動畫的時長.
    //參數3:可選的 easing 代表的是緩動還是勻速 linear(勻速)  swing(緩動)   默認不寫是緩動
    //參數4:可選的 動畫執行完畢後的回調函數.
    $('#lr800').click(function () {

      //讓id爲div1的元素動畫移動到800那個位置.
      // $('#div1').animate({
      //   left:800,
      //   width:200,
      //   height:200,
      //   opacity:0.5
      // },2000,'linear', function () {
      //   alert('動畫執行完畢了');
      // });

      $('#div1').animate({
        left:800,
        width:200,
        height:200,
        opacity:0.5
      },2000,'linear', function () {
        //既然這裏是一個函數,那就可以寫任意的代碼,那就可以在這裏讓div1做動畫.
        $('#div1').animate({
          left:400,
          width:300,
          height:300,
          top:150,
          opacity:1
        },2000);
      });

      //讓id爲div2的元素動畫移動到800那個位置.
      // $('#div2').animate({
      //   left:800
      // },2000,'swing');
    });
  });
</script>

html()方法和$()動態創建元素以及添加節點的幾種方式,empty清空節點/remove移除節點,clone克隆節點

<script>
  $(function () {
    //原生js中創建節點: document.write();  innerHTML;  document.createElement();

    //jQuery中如何創建節點呢?
    //html();   $();


    //1.html();
    //設置或者獲取內容的.
    $('#btnHtml1').click(function () {
      //1.1 獲取內容: html()方法不給參數
      //獲取到元素的所有內容.
      // console.log($('#div1').html());

      //1.2 設置內容: html()方法給參數
      //會把原來的內容給覆蓋
      //如果設置的內容中包含了標籤,是會把標籤給解析出來的.
      $('#div1').html('我是設置的內容<a href="https://www.baidu.com">百度一下</a>');
    });


    //2.$();
    //確實能創建元素,但是創建的元素只存在於內存中,如果要在頁面上顯示,就要追加.
    $('#btn1').click(function () {
      var $link = $('<a href="http://news.baidu.com/">我是新聞</a>');
      //console.log($link);
      //追加節點.
      $('#div1').append($link);
    });


  });
</script>
<script>
  $(function () {
    //1.append()
    //父元素.append(子元素); //作爲最後一個子元素添加.
    $('#btnAppend').click(function () {
      //1.1 新創建一個li標籤,添加到ul1中的去.
      // var $liNew = $("<li>我是新創建的li標籤</li>");
      // $('#ul1').append($liNew);

      //1.2 把ul1中已經存在的li標籤添加到ul中去. 剪切後作爲最後一個子元素添加.
      // var $li3 = $('#li3');
      // $('#ul1').append($li3);

      //1.3 把ul2中已經存在的li標籤添加到ul1中去.剪切後作爲最後一個子元素添加.
      var $li32 = $('#li32');
      $('#ul1').append($li32);
    });


    //2.prepend();
    //父元素.prepend(子元素); //作爲第一個子元素添加.
    $('#btnPrepend').click(function () {
      //2.1 新建一個li標籤,添加到ul1中去.
      // var $liNew = $("<li>我是新創建的li標籤</li>");
      // $('#ul1').prepend($liNew);

      //2.1 把ul1中已經存在的li標籤添加到ul1中去. 剪切後作爲第一個子元素添加.
      // var $li3 = $('#li3');
      // $('#ul1').prepend($li3);

      //2.2 把ul2中已經存在的li標籤添加到ul1中去. 剪切後作爲第一個子元素添加.
      var $li32 = $('#li32');
      $('#ul1').prepend($li32);
    });


    //3.before()
    //元素A.before(元素B); //把元素B插入到元素A的前面,作爲兄弟元素添加
    $('#btnBefore').click(function () {
      //新建一個div
      var $divNew = $('<div>我是新建的div</div>');
      $('#ul1').before($divNew);
    });

    //4.after();
    //元素A.after(元素B); //把元素B插入到元素A的後面,作爲兄弟元素添加.
    $('#btnAfter').click(function () {
      //新建一個div
      var $divNew = $('<div>我是新建的div</div>');
      $('#ul1').after($divNew);
    });


    //5.appendTo();
    //子元素.appendTo(父元素); //把子元素作爲父元素的最後一個子元素添加.
    $('#btnAppendTo').click(function () {
      //5.1 新建一個li標籤,添加到ul1中去.
      var $liNew = $("<li>我是新創建的li標籤</li>");
      $liNew.appendTo($('#ul1'));

    });
  });
</script>
<script>
  //清空元素: empty();
  //移除節點: remove();
  $(function () {
    //給按鈕設置點擊事件.
    $('#btn').click(function () {
      //1.清空ul.
      //$('#ul1').html(""); //不推薦使用,有可能會造成內存泄漏,不安全.
      // $('#ul1').empty();//推薦使用.

      //2.移除某一個元素.
      // $('#li3').remove(); //"自殺"

      //3.移除ul.但是隻能獲取li3這個標籤.
      $('#li3').parent().remove();

    });
  });
</script>
<script>
  $(function () {
    //給id爲div1的這個元素添加一個點擊事件.
    $('#div1').click(function () {
      alert('哈哈,我被點擊了...');
    });


    //jQuery中克隆節點:clone()
    //只存在與內存中,如果要在頁面上顯示,就應該追加到頁面上.
    //clone()方法參數不管是true還是false,都是會克隆到後代節點的.
    //clone()方法參數是true表示會把事件一起克隆到. 參數如果是false就不會克隆事件. 不給參數默認是false.
    //給按鈕設置點擊事件
    $('#clone').click(function () {
      var $cloneDiv = $('#div1').clone();
      //修改克隆節點的id
      $cloneDiv.attr('id','div2');
      //console.log($cloneDiv);
      //把克隆的節點追加到body中.
      $('body').append($cloneDiv);
    });

  });
</script>

val方法

val方法用於設置和獲取表單元素的值,例如input、textarea的值

//設置值
$("#name").val(“張三”);
//獲取值
$("#name").val();

 

html方法與text方法

html方法相當於innerHTML text方法相當於innerText

//設置內容
$(“div”).html(“<span>這是一段內容</span>”);
//獲取內容
$(“div”).html()
​
//設置內容
$(“div”).text(“<span>這是一段內容</span>”);
//獲取內容
$(“div”).text()

區別:html方法會識別html標籤,text方法會那內容直接當成字符串,並不會識別html標籤。

width方法與height方法

設置或者獲取高度

 

//帶參數表示設置高度
$(“img”).height(200);
//不帶參數獲取高度
$(“img”).height();

獲取網頁的可視區寬高

//獲取可視區寬度
$(window).width();
//獲取可視區高度
$(window).height();

scrollTop與scrollLeft

設置或者獲取垂直滾動條的位置

 

//獲取頁面被捲曲的高度
$(window).scrollTop();
//獲取頁面被捲曲的寬度
$(window).scrollLeft();

【案例:仿騰訊固定菜單欄案例】 【案例:小火箭返航案例】

offset方法與position方法

offset方法獲取元素距離document的位置,position方法獲取的是元素距離有定位的父元素的位置。

//獲取元素距離document的位置,返回值爲對象:{left:100, top:100}
$(selector).offset();
//獲取相對於其最近的有定位的父元素的位置。
$(selector).position();

【案例:固定頂部導航欄】

<script>
  $(function () {
    //思路:給頁面設置一個滾動事件,時刻監視頁面的scrollTop的值,
    // 如果這個值大於第一部分的高度,就設置第二部分爲固定定位.
    // 如果這個值小於第一部分的高度,就設置第二部分的定位還原.

    //計算第一部分的高度.
    var topHeight = $('.top').height();
    //計算第二部分的高度.
    var navHeight = $('.nav').height();

    //給頁面設置一個滾動事件.
    $(window).scroll(function () {
      //1.獲取頁面滾出去的距離(被捲曲出去的距離);
      var scrollTopValue =  $(window).scrollTop();
      //2.判斷,看scrollTopValue的值是不是大於第一部分的高度.
      if(scrollTopValue >= topHeight){
        //讓第二部分固定定位.
        $('.nav').css({
          position:'fixed',
          top:0,
          left:0
        });
        //設置第三部分的margin-top的值爲第二部分的高度.
        $('.main').css({
          marginTop:navHeight+10
        });
      }else {
        //讓第二部分定位還原.
        $('.nav').css({
          position:'static',
          top:0,
          left:0
        });
        //設置第三部分的margin-top的值爲原來的值.
        $('.main').css({
          marginTop:10
        });
      }
    });



  });
</script>

 

attr設置屬性或添加屬性和removeAttr移除屬性

<script>
  $(function () {
    //jQuery中操作屬性:attr() removeAttr();
    //1.設置屬性
    $('#btn2').click(function () {
      //設置單屬性.
      // $('img').attr('src','992.gif');//以前有src屬性,更改這個屬性.
      // $('img').attr('aaa','哈哈哈');//修改自定義屬性.
      // $('img').attr('bbb','bbb');//如果元素原來沒有這個屬性,那就是添加屬性.
      //設置多屬性.
      $('img').attr({
        src:'992.gif',
        aaa:"hahaha",
        bbb:'bbb'
      });
    });

    //2.獲取屬性.
    $('#btn1').click(function () {
      //console.log($('img').attr('src'));//自帶的屬性可以獲取
      //console.log($('img').attr('aaa'));//自定義的屬性也可以獲取
      console.log($('img').attr('bbb'));//如果沒有這個屬性,獲取到的值就是undefined; attr()設置的屬性也是可以獲取的.
    });

    //3.移除屬性.
    $('#btn3').click(function () {
      //移除單屬性.
      // $('img').removeAttr('alt');
      // $('img').removeAttr('aaa');
      // $('img').removeAttr('bbb');

      $('img').removeAttr('alt aaa bbb'); //移除多屬性.
    });

  });
</script>
【美女相冊】
<script>
  $(function () {
      //1.需求
      //給小圖片a標籤設置一個單擊事件.
      //讓id爲image的img標籤修改src屬性爲當前點擊的a標籤的href屬性的值
      //讓id爲des的這個p標籤的文本設置爲當前點擊的這個a標籤的title屬性的值.

      $('#imagegallery>li>a').click(function () {
          //獲取當前點擊的a標籤的href屬性的值和title屬性的值。
          var srcValue = $(this).attr('href');
          var contentValue = $(this).attr('title');
          //給img標籤的src屬性賦值,以及給p標籤的內容賦值。
          $('#image').attr('src',srcValue);
          $('#des').text(contentValue);
          //阻止a標籤的跳轉
          return false;
      });


  });
</script>

對於checked、selected、disabled這類boolean類型的屬性來說,不能用attr方法,只能用prop方法

<script>
  $(function () {
    //回憶一下,有一類屬性比如:checked,寫在元素的身上就表示選中,沒有寫在元素的身上就表示沒有選中。
    //這一類屬性,用原生js是如何操作的呢? 給他設置true或者false, 取值也是得到true或者false.
    // document.getElementById("btn1").onclick = function () {
    //   //設置操作。
    //   //document.getElementById("ckb1").checked = false;
    //   //獲取操作。
    //   console.log(document.getElementById("ckb1").checked);
    // };

    //jQuery.
    // $('#btn1').click(function () {
    //   console.log($('#ckb1').attr('checked')); //無論是選中還是沒有選中,都返回一個undefined。
    // });

    //原因是:
    //在jQuery1.6之後,對於checked、selected、disabled這類boolean類型的屬性來說,不能用attr方法,只能用prop方法。

     $('#btn1').click(function () {
       console.log($('#ckb1').prop('checked'));
       //如果多選框是選中狀態返回一個true; 如果多選框是取消選中狀態那返回就是一個false.
     });
  });
</script>
【案例:多選框全選】
<script>
  $(function () {
      //需求1:上面的多選框選中,下面的多選框們跟着選中,上面的多選框沒有選中,下面的多選框們跟着不選中.
      //需求2:下面的多選框們,都有單擊事件:
      //如果下面的多選框們都選中了,那麼上面的那個多選框跟着選中,如果下面多選框有一個沒有選中,那麼上面的多選框就不選中.

      //需求1:
      $('#j_cbAll').click(function () {
          //獲取這多選框的checked值。
          var checkedValue = $(this).prop('checked');
          //console.log(checkedValue);
          //讓下面的多選框們的checked跟隨這個checkedValue
          $('#j_tb input').prop('checked',checkedValue);
      });

      //需求2:
      $('#j_tb input').click(function () {
          //判斷下面的那四個多選框是否都被選中了。
          var numOfAll = $('#j_tb input').length; //獲取到下面所有多選框的個數。
          var numOfSelect = $('#j_tb input:checked').length; //獲取到下面被選中的多選框的個數。
          console.log(numOfAll + ":" + numOfSelect);
          //判斷
          // if(numOfAll == numOfSelect){
          //     //全部被選中。
          //     $('#j_cbAll').prop('checked',true);
          // }else {
          //     //有的有沒選中。
          //     $('#j_cbAll').prop('checked',false);
          // }

          //上面這個判斷其實可以優化。
          $('#j_cbAll').prop('checked',numOfAll == numOfSelect);
      });

  });
</script>

jQuery事件機制

JavaScript中已經學習過了事件,但是jQuery對JavaScript事件進行了封裝,增加並擴展了事件處理機制。jQuery不僅提供了更加優雅的事件處理語法,而且極大的增強了事件的處理能力。

jQuery事件發展歷程(瞭解)

簡單事件綁定>>bind事件綁定>>delegate事件綁定>>on事件綁定(推薦)

簡單事件註冊

click(handler)          單擊事件
mouseenter(handler)     鼠標進入事件
mouseleave(handler)     鼠標離開事件

特點:不支持同時註冊,也不支持動態註冊.

   //jQuery註冊事件的發展歷程. (瞭解)

    //1.簡單事件綁定 click();
     $('div').click(function () {
       console.log("鼠標單擊事件");
     });
     $('div').mouseenter(function () {
       console.log("鼠標移入事件...");
     });

bind方式註冊事件

//第一個參數:事件類型
//第二個參數:事件處理程序
$("p").bind("click mouseenter", function(){
    //事件響應方法
});

特點:支持同時註冊,也不支持動態註冊.

    //2. bind方式註冊事件
    //支持同時註冊,也不支持動態註冊.
     $('div').bind({
       mouseenter: function () {
         console.log("鼠標移入事件...");
       },
       click: function () {
         console.log("鼠標單擊事件");
       }
    });

delegate註冊委託事件

// 第一個參數:selector,要綁定事件的元素
// 第二個參數:事件類型
// 第三個參數:事件處理函數
$(".parentBox").delegate("p", "click", function(){
    //爲 .parentBox下面的所有的p標籤綁定事件
});

特點:支持同時註冊,也不支持動態註冊.,只能註冊委託事件,因此註冊時間需要記得方法太多了

    //3.delegate註冊委託事件-原理是事件冒泡.
    //支持同時註冊,也支持動態註冊.
     $('body').delegate('div',{
       mouseenter: function () {
         console.log("鼠標移入事件");
       },
       click: function () {
         console.log("鼠標單擊事件");
       }
     });

on註冊事件

on註冊事件(重點)

jQuery1.7之後,jQuery用on統一了所有事件的處理方法。上面的三種註冊綁定事件方式都不用了!

最現代的方式,兼容zepto(移動端類似jQuery的一個庫),強烈建議使用。

on註冊簡單事件(特點:支持同時註冊,不支持動態註冊.)

// 表示給$(selector)綁定事件,並且由自己觸發,不支持動態綁定。
$(selector).on( "click", function() {});

on註冊委託事件(特點:支持同時註冊,支持動態註冊.)

// 表示給$(selector)綁定代理事件,當必須是它的內部元素span才能觸發這個事件,支持動態綁定
$(selector).on( "click",“span”, function() {});----->原理:將span的點擊事件委託給selector代理
效果:點擊span會觸發函數

on註冊事件的語法:

// 第一個參數:events,綁定事件的名稱可以是由空格分隔的多個事件(標準事件或者自定義事件)
// 第二個參數:selector, 執行事件的後代元素(可選),如果沒有後代元素,那麼事件將有自己執行。
// 第三個參數:data,傳遞給處理函數的數據,事件觸發的時候通過event.data來使用(不常使用)
// 第四個參數:handler,事件處理函數
$(selector).on(events[,selector][,data],handler);
​

事件解綁

unbind方式(不用)

$(selector).unbind(); //解綁所有的事件
$(selector).unbind("click"); //解綁指定的事件

undelegate方式(不用)

$( selector ).undelegate(); //解綁所有的delegate事件
$( selector).undelegate( “click” ); //解綁所有的click事件

off方式(推薦)

// 解綁匹配元素的所有事件
$(selector).off();
// 解綁匹配元素的所有click事件
$(selector).off("click");

觸發事件

$(selector).click(); //觸發 click事件
$(selector).trigger("click");

滿足條件才觸發事件 :

    $('#btn2').on('click', function () {
      var res = confirm('請問林哥帥嗎');
      if(res){
        //觸發自定義的linge事件.
        $('#one').trigger('linge');
      }
    });

jQuery事件對象

jQuery事件對象其實就是js事件對象的一個封裝,處理了兼容性。

//screenX和screenY   對應屏幕最左上角的值
//clientX和clientY   距離頁面左上角的位置(忽視滾動條)
//pageX和pageY   距離頁面最頂部的左上角的位置(會計算滾動條的距離)
​
//event.keyCode 按下的鍵盤代碼
//event.data    存儲綁定事件時傳遞的附加數據
​
//event.stopPropagation()   阻止事件冒泡行爲
//event.preventDefault()    阻止瀏覽器默認行爲
//return false:既能阻止事件冒泡,又能阻止瀏覽器默認行爲。

【案例:鋼琴版導航(加強).html】

<script>
  $(function () {

      //獲取div
      var $div = $('#bgChange');
      //獲取顯示按鍵的span
      var $showCode = $('#keyCodeSpan');

      //給頁面註冊一個鍵盤按下事件.
      $(document).on('keydown', function (e) {
          //console.log(e.keyCode); //r 82   g 71   b 66   p 80   y 89
          switch (e.keyCode){
              case 82:
                  $div.css('backgroundColor','red');
                  $showCode.text(82);
                  break;
              case 71:
                  $div.css('backgroundColor','green');
                  $showCode.text(71);
                  break;
              case 66:
                  $div.css('backgroundColor','blue');
                  $showCode.text(66);
                  break;
              case 80:
                  $div.css('backgroundColor','purple');
                  $showCode.text(80);
                  break;
              case 89:
                  $div.css('backgroundColor','yellow');
                  $showCode.text(89);
                  break;
              default :
                  $div.css('backgroundColor','pink');
                  $showCode.text("查無此鍵");
                  break;
          }
      });

  });
</script>

jQuery補充知識點

鏈式編程

通常情況下,只有設置操作才能把鏈式編程延續下去。因爲獲取操作的時候,會返回獲取到的相應的值,無法返回 jQuery對象。

end(); // 篩選選擇器會改變jQuery對象的DOM對象,想要回復到上一次的狀態,並且返回匹配元素之前的狀態。

    1.什麼時候可以鏈式編程?
    如果給元素調用一個方法,這個方法有返回值,並且返回的是一個jQuery對象,那就可以繼續再點出jQuery方法.
    //$('div').width(100).height(100).css('backgroundColor','red');


    2.必須是jQuery對象才能點出jQuery方法.
    console.log($('div').width(100).width()); 100
    //$('div').width(100).width().height(100); 報錯了,因爲數值不能點出jQuery方法.


    3.有些時候我們一個方法返回的確實是一個jQuery對象
    但是這個對象又不是我們想要的對象,那這個時候就不要再繼續點下去了..


    4.end(); 回到上一個狀態.
    //$(this).text(sx_wjx).prevAll().text(sx_wjx).end().nextAll().text(kx_wjx);


    5.end()方法他也是jQuery方法,那他也需要一個jQuery對象才能點出了啊,
    width()方法返回的是一個數值, 數值能點出end()方法來嗎? 顯然不行.
    //$('div').width(100).width().end().height(100); 不行

【案例:五角星評分案例.html】

<script>
   $(function () {
     //需求1:鼠標移入到li標籤上,當前li標籤和他之前的li標籤顯示實心五角心,後面的li顯示空心五角心.
     //需求2:鼠標離開li,所有的li都變成空心.
     //需求3:點擊li,鼠標離開後,剛纔點擊的那個li和之前的li都變成實心五角心,後面空心五角心.

     //prev();    上一個兄弟.
     //prevAll(); 之前所有的兄弟
     //next();    下一個兄弟.
     //nextAll(); 之後所有的兄弟

     //聲明兩個個變量,分別記錄這個實心/空心五角心.
     var sx_wjx = '★';
     var kx_wjx = '☆';

     //需求1:
     $('.comment>li').on('mouseenter', function () {
       // //當前鼠標移入的li和他之前的兄弟li都顯示實心五角心.
       // $(this).text(sx_wjx).prevAll().text(sx_wjx);
       // //當前鼠標移入的li之後的兄弟li都顯示空心五角心.
       // $(this).nextAll().text(kx_wjx);

       //這樣不行.
       //$(this).text(sx_wjx).prevAll().text(sx_wjx).nextAll().text(kx_wjx);

       //這樣又可行, 加了一個end();
       $(this).text(sx_wjx).prevAll().text(sx_wjx).end().nextAll().text(kx_wjx);

     }).on('mouseleave', function () {
       //需求2:
       $('.comment>li').text(kx_wjx);

       //獲取剛纔點擊的那個li.
       $('.comment>li[clickCurrent]').text(sx_wjx).prevAll().text(sx_wjx);

     }).on('click', function () {
       //需求3:
       //給鼠標當前點擊的li做一個記號,爲什麼要做一個記號,是因爲鼠標離開的時候,要知道你剛纔點擊的是哪一個li.
       //給當前鼠標點擊的這個li添加一個獨一無二的屬性.
       $(this).attr('clickCurrent','current').siblings().removeAttr('clickCurrent');
     });


   });
</script>


each方法

jQuery的隱式迭代會對所有的DOM對象設置相同的值,但是如果我們需要給每一個對象設置不同的值的時候,就需要自己進行迭代了。

作用:遍歷jQuery對象集合,爲每個匹配的元素執行一個函數

// 參數一表示當前元素在所有匹配元素中的索引號
// 參數二表示當前元素(DOM對象)
$(selector).each(function(index,element){});

【案例:不同的透明度.html】

<script>
  $(function () {
    //需求:找到所有的li標籤,分別設置透明度,透明度是遞增到1.

    //1.獲取所有的li標籤.
    var $lis = $('#ulList').children();
    //console.log($lis);

    //2.給$lis裏面的每一個li標籤設置透明度.
    //$lis.css('opacity',0.5);//如果這樣設置的話,由於隱式迭代那每一個li標籤的透明度都設置成了0.5,不符合需求.

    //給每一個對象設置不同的值的時候
    //作用:遍歷jQuery對象集合,爲每個匹配的元素執行一個函數
    $lis.each(function (index,element) {
      // console.log(index); //每一個li標籤的索引
      // console.log(element);//每一個li標籤,是一個dom對象.

      $(element).css('opacity',(index+1)/10);
    });

  });
</script>

多庫共存

jQuery使用$作爲標示符,但是如果與其他框架中的$衝突時,jQuery可以釋放$符的控制權.

var c = $.noConflict();//釋放$的控制權,並且把$的能力給了c
<script src="heima.js"></script>
<script src="jquery-1.12.4.js"></script>
<script src="jquery-3.0.0.js"></script>

<script>
  //1.如何查看jQuery的版本?
  //通過jQuery文件名來查看jQuery的版本是不靠譜的做法.
  //通過以下四種方式可以查看jQuery的版本.
  // console.log(jQuery.fn.jquery);
  // console.log(jQuery.prototype.jquery);
  // console.log($.fn.jquery);
  // console.log($.prototype.jquery);


  //2.如果引入了多個jQuery文件. 那使用的$是哪一個jQuery文件中的呢?
  //那個文件後引入,使用的$就是誰的.
  //console.log($.fn.jquery);


  //3.多庫共存
  // var _$ =  $.noConflict(); //3.0.0版本jQuery文件把$符號的控制權給釋放了.
  //
  // (function ($) {
  //   //在這個自執行函數中,就可以繼續使用$了.
  // }(_$));
//
  // console.log(_$.fn.jquery);//3.0.0
  // console.log(jQuery.fn.jquery);//3.0.0
  // console.log($.fn.jquery);//1.12.4



  //4.多庫共存2
  //console.log($.fn.jquery);
  var _$300 = $.noConflict(); //3.0.0版本的jQuery把$的控制權給釋放了

  var _$1124 = $.noConflict(); //1.12.4版本的jQuery把$的控制權給釋放了

  console.log($);
  console.log(_$1124.fn.jquery);
  console.log(_$300.fn.jquery);


</script>

 

發佈了108 篇原創文章 · 獲贊 31 · 訪問量 9295
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章