1. 程式人生 > >我與前端之間不得不說的三天兩夜之jQuery

我與前端之間不得不說的三天兩夜之jQuery

其中 microsoft back 事件綁定 它的 委派 世界 頻繁 -c

前端基礎之jquery

一 jQuery是什麽?

[1] jQuery由美國人John Resig創建,至今已吸引了來自世界各地的眾多 javascript高手加入其team。

[2] jQuery是繼prototype之後又一個優秀的Javascript框架。其宗旨是——WRITE LESS,DO MORE!

[3] 它是輕量級的js庫(壓縮後只有21k) ,這是其它的js庫所不及的,它兼容CSS3,還兼容各種瀏覽器

[4] jQuery是一個快速的,簡潔的javaScript庫,使用戶能更方便地處理HTMLdocuments、events、實現動畫效果,並且方便地為網站提供AJAX交互。

[5] jQuery還有一個比較大的優勢是,它的文檔說明很全,而且各種應用也說得很詳細,同時還有許多成熟的插件可供選擇。

二 什麽是jQuery對象?

jQuery 對象就是通過jQuery包裝DOM對象後產生的對象。jQuery 對象是 jQuery 獨有的. 如果一個對象是 jQuery 對象, 那麽它就可以使用 jQuery 裏的方法: $(“#test”).html();
$("#test").html() 
   
         意思是指:獲取ID為test的元素內的html代碼。其中html()是jQuery裏的方法 

         這段代碼等同於用DOM實現代碼: document.getElementById(" test ").innerHTML; 

         雖然jQuery對象是包裝DOM對象後產生的,但是jQuery無法使用DOM對象的任何方法,同理DOM對象也不能使用jQuery裏的方法.亂使用會報錯

         約定:如果獲取的是 jQuery 對象, 那麽要在變量前面加上$. 

var $variable = jQuery 對象
var variable = DOM 對象

$variable[0]:jquery對象轉為dom對象      $("#msg").html(); $("#msg")[0].innerHTML

jquery的基礎語法:$(selector).action()

參考:

http://jquery.cuishifeng.cn/
dom對象和jquery對象的區別
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>



</head>
<body>



<p id="p1">PPP</p>

<div class="c1">DIV</div>
<div class="c1">DIV</div>
<div class="c1">DIV</div>
<div>DIV</div>

<script src="jquery-3.2.1.js"></script>

<script>
//          $("#p1")  ------>jquery對象
        var ele=document.getElementById("p1");  //ele----->  DOM對象
        console.log(ele.innerHTML);
        console.log($("#p1").html());  //   jquery對象與DOM對象下的方法和屬性不能混用
</script>
</body>
</html>
輸出結果:這樣調用才是正確的方式技術分享*****註意jquery對象和dom對象下的方法和屬性不能混用

三 尋找元素(選擇器和篩選器)

3.1 選擇器

3.1.1 基本選擇器

$("*")  $("#id")   $(".class")  $("element")  $(".class,p,div")
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>



</head>
<body>



<p id="p1">PPP</p>

<div class="c1">DIV</div>
<div class="c1">DIV</div>
<div class="c1">DIV</div>
<div>DIV</div>

<script src="jquery-3.2.1.js"></script>

<script>
$("#p1").css({"color":"red","fontSize":"35px"});    //通過id值來定位
$(".c1").css("color","green")       //通過class屬性來定位
$("div").css("background-color","gold") //通過標簽屬性來定位
$("*").css("color","green")   // 通配符表示所有
    
</script>
</body>
</html>

3.1.2 層級選擇器

$(".outer div")  $(".outer>div")   $(".outer+div")  $(".outer~div")

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="outer">
    <div class="inner">
        <p>p3</p>
        <div>DIV</div>
    </div>
    <p>p2</p>
</div>
<p>p1</p>
<script src="jquery-3.2.1.js"></script>
<script>
     $(".outer p").css("color","red")    //後代選擇器指後面所有的p標簽兒子孫子之類的標簽
     $(".outer>p").css("color","red")    //子代選擇器指兒子這代的p標簽
</script>
</body>
</html>


3.1.3 基本篩選器 

$("li:first")  $("li:eq(2)")  $("li:even") $("li:gt(1)")
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="outer">
    <div class="inner">
        <p>p3</p>
        <div>DIV</div>
    </div>
    <p>p2</p>
</div>
<p>p1</p>
<ul class="box">
    <li class="item">111</li>
    <li class="item">222</li>
    <li class="item">333</li>
    <li class="item">444</li>
    <li class="item">555</li>
    <li class="item">666</li>
</ul>


<script src="jquery-3.2.1.js"></script>
<script>


//======================篩選器
    //根據index的索引值來進行定位
     $(".box .item:eq(5)").css("color","red")    //eq是等於,eq(5)表示是等於5的索引值的標簽變為紅色
     $(".box .item:lt(4)").css("color","red")    //lt是小於,lt(4)表示是小於4的索引值的標簽變為紅色
     $(".box .item:gt(3)").css("color","red")    //gt是大於,ge(3)表示是大於3的索引值的標簽變為紅色
     $(".box .item:odd").css("color","red")     //odd是取步長,空一個取一個
</script>

</body>
</html>    
    

3.1.4 屬性選擇器

$(‘[id="div1"]‘)   $(‘["alex="sb"][id]‘)

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="outer">
    <div class="inner">
        <p>p3</p>
        <div>DIV</div>
    </div>
    <p>p2</p>
</div>
<p>p1</p>
<ul class="box">
    <li class="item">111</li>
    <li class="item">222</li>
    <li class="item">333</li>
    <li class="item">444</li>
    <li class="item">555</li>
    <li class="item">666</li>
</ul>
<div egon="sb">egon</div>
<div egon="sb" class="c1">egon2</div>


<script src="jquery-3.2.1.js"></script>
<script>
    // ==================屬性選擇器
     $("[egon=‘sb‘]").css("color","red")         //只包含自定義的egon=sb的標簽就變紅
    $("[egon=‘sb‘][class]").css("color","red")  //根據後面的class來定位標簽 所有這個是後面的egon2字體變紅
</script>

</body>
</html>

3.1.5 表單選擇器

$("[type=‘text‘]")----->$(":text")         註意只適用於input標簽  : $("input:checked")
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="outer">
    <div class="inner">
        <p>p3</p>
        <div>DIV</div>
    </div>
    <p>p2</p>
</div>
<p>p1</p>
<ul class="box">
    <li class="item">111</li>
    <li class="item">222</li>
    <li class="item">333</li>
    <li class="item">444</li>
    <li class="item">555</li>
    <li class="item">666</li>
</ul>
<div egon="sb">egon</div>
<div egon="sb" class="c1">egon2</div>

<input type="text">
<input type="text">
<input type="text">
<input type="checkbox">
<script src="jquery-3.2.1.js"></script>
<script>
    //  針對input表單
    $("[type=‘text‘]").css("border","1px solid red");     //這個完整的寫法
 
    $(":text").css("border","1px solid green");          //這個是簡寫,但是只針對input表單兩個方法的效果是一樣的
</script>
</body>
</html>
推薦寫法:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="outer">
    <div class="inner">
        <p>p3</p>
        <div>DIV</div>
    </div>
    <p>p2</p>
</div>
<p>p1</p>
<ul class="box">
    <li class="item">111</li>
    <li class="item">222</li>
    <li class="item">333</li>
    <li class="item">444</li>
    <li class="item">555</li>
    <li class="item">666</li>
</ul>

<script src="jquery-3.2.1.js"></script>
<script>

    var x=3;
    $("ul li:eq(x)").css("color","red");    //想通過一個靈活的變量來定位標簽,但這種方法是錯誤的
</script>
</body>
</html>
輸出結果:結果沒有一點變化技術分享 推薦寫法:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="outer">
    <div class="inner">
        <p>p3</p>
        <div>DIV</div>
    </div>
    <p>p2</p>
</div>
<p>p1</p>
<ul class="box">
    <li class="item">111</li>
    <li class="item">222</li>
    <li class="item">333</li>
    <li class="item">444</li>
    <li class="item">555</li>
    <li class="item">666</li>
</ul>




<div egon="sb">egon</div>
<div egon="sb" class="c1">egon2</div>

<input type="text">
<input type="text">
<input type="text">
<input type="checkbox">


<script src="jquery-3.2.1.js"></script>
<script>
    var x=3;
    //$("ul li:eq(x)").css("color","red");
    $("ul li").eq(x).css("color","red");   // 推薦寫法
</script>

</body>
</html>
輸出結果:可以看到索引值為3的標簽變了技術分享

3.1.6 表單屬性選擇器

    :enabled
    :disabled
    :checked
    :selected
<body>

<form>
    <input type="checkbox" value="123" checked>
    <input type="checkbox" value="456" checked>


  <select>
      <option value="1">Flowers</option>
      <option value="2" selected="selected">Gardens</option>
      <option value="3" selected="selected">Trees</option>
      <option value="3" selected="selected">Trees</option>
  </select>
</form>


<script src="jquery.min.js"></script>
<script>
    // console.log($("input:checked").length);     // 2

    // console.log($("option:selected").length);   // 只能默認選中一個,所以只能lenth:1

    $("input:checked").each(function(){

        console.log($(this).val())
    })
</script>
</body>

3.2 篩選器

3.2.1 過濾篩選器

$("li").eq(2)  $("li").first()  $("ul li").hasclass("test")

3.2.2 查找篩選器 

 查找子標簽:         $("div").children(".test")      $("div").find(".test")  
                               
 向下查找兄弟標簽:    $(".test").next()               $(".test").nextAll()     
                    $(".test").nextUntil() 
                           
 向上查找兄弟標簽:    $("div").prev()                  $("div").prevAll()       
                    $("div").prevUntil()   
 查找所有兄弟標簽:    $("div").siblings()  
              
 查找父標簽:         $(".test").parent()              $(".test").parents()     
                    $(".test").parentUntil() 

示例:

查找子標簽:示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="c1">
    <div class="c3">
        DIV
        <div class="c4">

            <p class="p1">P1</p>
        </div>
    </div>
    <p>P2</p>
</div>


[.c4,.c3,]
<div class="c1">
    <p class="item" id="d1">p3</p>
    <p class="item">p3</p>
    <p class="item">p3</p>
    <p class="item" id="d4">p3</p>
    <p class="item">p3</p>
</div>
<div id="c1" egon="123"></div>
<script src="jquery-3.2.1.js"></script>
<script>
//==================================================  find:找所有後代     children:找所有子代

     $(".c1").children("p").css("border","1px solid red");     //找所有的子代

     $(".c1").find("p").css("border","1px solid red")     //找所有的後代
向下查找兄弟標簽:示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="c1">
    <div class="c3">
        DIV
        <div class="c4">

            <p class="p1">P1</p>
        </div>
    </div>
    <p>P2</p>
</div>
[.c4,.c3,]
<div class="c1">
    <p class="item" id="d1">p3</p>
    <p class="item">p3</p>
    <p class="item">p3</p>
    <p class="item" id="d4">p3</p>
    <p class="item">p3</p>
</div>
<div id="c1" egon="123"></div>
<script src="jquery-3.2.1.js"></script>
<script>
    // jquery支持鏈式操作

    //==========================================找兄弟標簽
//    next

    $("#d1").next().css("color","red").next().css("color","green");  //向下查找兄弟標簽,還可以通過這個兄弟標簽在往下找兄弟標簽
    $("#d1").nextAll().css("color","red");        //向下找所有的兄弟標簽
    $("#d1").nextUntil("#d4").css("color","red");  //向下找兄弟標簽直到找到指定的兄弟標簽停止,但是不顧頭和尾,只有中間一段標簽會有作用
</script>
</body>
</html>    

向上查找兄弟標簽:

示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="c1">
    <div class="c3">
        DIV
        <div class="c4">

            <p class="p1">P1</p>
        </div>
    </div>
    <p>P2</p>
</div>


[.c4,.c3,]
<div class="c1">
    <p class="item" id="d1">p3</p>
    <p class="item">p3</p>
    <p class="item">p3</p>
    <p class="item" id="d4">p3</p>
    <p class="item">p3</p>
</div>
<div id="c1" egon="123"></div>
<script src="jquery-3.2.1.js"></script>
<script>
    //prev
    $("#d4").prev().css("color","red");                   //向上找兄弟標簽
    $("#d4").prevAll().css("color","red")                 //向上找所有的兄弟標簽
    $("#d4").prevUntil("#d1").css("color","red")          // 向上找到指定位置的兄弟標簽不顧頭和尾。
</script>
</body>
</html>    
    

查找所有的兄弟標簽

示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="c1">
    <div class="c3">
        DIV
        <div class="c4">

            <p class="p1">P1</p>
        </div>
    </div>
    <p>P2</p>
</div>


[.c4,.c3,]
<div class="c1">
    <p class="item" id="d1">p3</p>
    <p class="item">p3</p>
    <p class="item">p3</p>
    <p class="item" id="d4">p3</p>
    <p class="item">p3</p>
</div>
<div id="c1" egon="123"></div>
<script src="jquery-3.2.1.js"></script>
<script>
    //siblings
    $("#d4").siblings().css("color","red");      //查找自己的所有的兄弟標簽
</script>

</body>
</html>    
輸出結果:技術分享 查找父標簽:示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div class="c1">
    <div class="c3">
        <!--DIV-->
        <div class="c4">

            <p class="p1">P1</p>
        </div>
    </div>
    <p>P2</p>
</div>


[.c4,.c3,]
<div class="c2">
    <p class="item" id="d1">p3</p>
    <p class="item">p3</p>
    <p class="item">p3</p>
    <p class="item" id="d4">p3</p>
    <p class="item">p3</p>
</div>
<div id="c1" egon="123"></div>
<script src="jquery-3.2.1.js"></script>
<script>

// ===============================================找父標簽
      console.log($(".p1").parent().parent().attr("class"))       //找父級標簽,可以通過找父級標簽找到爺爺級標簽
      $(".p1").parents().css("color","red")                      //找所有的父級標簽
      $(".p1").parentsUntil(".c1").css("border","1px solid red") //找到指定位置的父級標簽.
</script>

</body>
</html>
    

四 操作元素(屬性,css,文檔處理)

4.1 事件

頁面載入

ready(fn)  // 當DOM載入就緒可以查詢及操縱時綁定一個要執行的函數。
$(document).ready(function(){}) -----------> $(function(){}) 

事件綁定

//語法:  標簽對象.事件(函數)    
eg: $("p").click(function(){})
示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<ul id="box">
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="ite,m46">111</li>

</ul>

<button class="add">ADD</button>
<button class="releave">off</button>

<script src="jquery-3.2.1.js"></script>
<script>
    // 一個標簽對象.on事件=function(){}           //js對象的示例

    // 一個jquery對象(集合對象).事件(function(){})
//
     $(".item").click(function (){                                //js裏面是on加上click在這裏不用on了
         alert(123)
     });
         $(".add").click(function () {
         $("#box").append("<div class=‘item‘>444</div>")
     });
    
</script>
</body>
</html>
輸出結果:技術分享想通過add來添加的數也加上時間試試bind方法示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<ul id="box">
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="ite,m46">111</li>

</ul>

<button class="add">ADD</button>
<button class="releave">off</button>

<script src="jquery-3.2.1.js"></script>
<script>
    
    //廢棄的bind方法
    $(".item").bind("click",function () {
        alert(123)
    });
//
     $(".add").click(function () {
         $("#box").append("<div class=‘item‘>444</div>")
     });
</script>
</body>
</html>
輸出結果:發現點111有事件,但是點add出現的444還是沒反應。技術分享 最後用on方法示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<ul id="box">
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="ite,m46">111</li>

</ul>

<button class="add">ADD</button>
<button class="releave">off</button>

<script src="jquery-3.2.1.js"></script>
<script>   

//  on方法

    $("#box").on("click",".item",function () {              //通過父標簽#box,on("事件名稱","定義具體操作標簽"),方法(){事件}
        alert($(this).html());
        alert($(this).index());
    });
    $(".add").click(function () {
    $("#box").append("<div class=‘item‘>444</div>")
     });
</script>
</body>
</html>
輸出結果:最後用on方法解決了技術分享 哎這個方法解決了,想通過一個按鈕來把事件給停止掉示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<ul id="box">
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="item">111</li>
    <li class="ite,m46">111</li>

</ul>

<button class="add">ADD</button>
<button class="releave">off</button>

<script src="jquery-3.2.1.js"></script>
<script>
    $("#box").on("click",".item",function () {
        alert($(this).html());
//        alert($(this).index());
    });
//
     $(".add").click(function () {
         $("#box").append("<div class=‘item‘>444</div>")
     });
    $(".releave").click(function () {      // 給添加的按鈕添加事件

       $("#box").off("click")             //通過off方法去除了click事件。
    });
</script>
</body>
</html>   
輸出結果:可以看到我再點沒觸發事件了技術分享



事件委派:

$("").on(eve,[selector],[data],fn)  // 在選擇元素上綁定一個或多個事件的事件處理函數。
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>
<hr>
<button id="add_li">Add_li</button>
<button id="off">off</button>

<script src="jquery.min.js"></script>
<script>
    $("ul li").click(function(){
        alert(123)
    });

    $("#add_li").click(function(){
        var $ele=$("<li>");
        $ele.text(Math.round(Math.random()*10));
        $("ul").append($ele)

    });


//    $("ul").on("click","li",function(){
//        alert(456)
//    })

     $("#off").click(function(){
         $("ul li").off()
     })
    
</script>

事件切換

hover事件:

一個模仿懸停事件(鼠標移動到一個對象上面及移出這個對象)的方法。這是一個自定義的方法,它為頻繁使用的任務提供了一種“保持在其中”的狀態。

over:鼠標移到元素上要觸發的函數

out:鼠標移出元素要觸發的函數

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .test{

            width: 200px;
            height: 200px;
            background-color: wheat;

        }
    </style>
</head>
<body>


<div class="test"></div>
</body>
<script src="jquery.min.js"></script>
<script>
//    function enter(){
//        console.log("enter")
//    }
//    function out(){
//        console.log("out")
//    }
// $(".test").hover(enter,out)


$(".test").mouseenter(function(){
        console.log("enter")
});

$(".test").mouseleave(function(){
        console.log("leave")
    });

</script>
</html>

4.2 屬性操作

--------------------------CSS類
$("").addClass(class|fn)
$("").removeClass([class|fn])

--------------------------屬性
$("").attr();
$("").removeAttr();
$("").prop();
$("").removeProp();

--------------------------HTML代碼/文本/值
$("").html([val|fn])
$("").text([val|fn])
$("").val([val|fn|arr])

---------------------------
$("#c1").css({"color":"red","fontSize":"35px"})



















來自為知筆記(Wiz)

我與前端之間不得不說的三天兩夜之jQuery