jQuery

1 基本概念

官網:  https://jquery.com/

jQuery是javascript的一個庫,包含多個可重用的函數,用來輔助我們簡化javascript開發。

JavaScript的缺點:

  1.     window.onload有事件覆蓋問題,只能寫一個;
  2.     代碼容錯性差;
  3.     瀏覽器兼容性問題;
  4.     書寫繁瑣,代碼多;
  5.     代碼較亂,各個頁面都有;
  6.     動畫效果難以實現。

2 jQuery的使用

1 引入

2 入口函數

3 JavaScript對象與jQuery對象 

4 選擇器

5 動畫效果

6 屬性操作

 7 文檔(標籤)操作 

8 表單操作

9 位置操作

10 事件流

11 其他方法

12 Ajax方法 

1 引入

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

2 入口函數

    <script type="text/javascript" src="jquery-3.4.0.js"></script>  
    <script type="text/javascript">
        console.log($(document));     //jquery對象,類似僞數組
        console.log($(document)[0]);  //js對象,該html文件對象

        //入口函數,類似js中window.onload(),但不會出現事件重疊現象
     
   //方式1
        $(document).ready(function(){
            alert(1);
        });

        //方式2
        $(function(){
            alert(2);
        });

        //方式3
        $(window).ready(function(){
            alert(3);
        });

    </script>

 3 JavaScript對象與jQuery對象

        $(function(){
            var oDivJq = $("#box1");      //jQuery對象
            var oDivJs = document.getElementById('box2');   //JavaScript對象

            console.log(oDivJq);
            console.log(oDivJs);

            //轉換
            //jQuery-->JavaScript
            console.log(oDivJq[0]);
            console.log(oDivJq.get(0));

            //JavaScript-->jQuery
            console.log($(oDivJs));
        });

 4 選擇器

    //1 基本選擇器
        //標籤選擇器
        $(function(){
            $("div").click(function(){
                console.log(this);   //此時this爲js對象
                console.log($(this)); 

                console.log(this.innerText);
                console.log($(this).text());
            });
        });
        //類選擇器
        console.log($(".box"));
        //id選擇器
        console.log($("#box"));


    //2 層級選擇器
        // 後代選擇器(所有級子代)
        console.log($('div p'));
        // >子代選擇器(最近一級的子代,親兒子)
        console.log($('div > p'));
        // +毗鄰選擇器 匹配 所有緊接在#brother元素後的下一個元素
        $('#brother+li').css('color','yellow');
        // ~兄弟選擇器
        // 匹配所有#brother之後的所有兄弟姐妹元素
        $('#brother~li').css('background','#996633');
        

    //3 基本過濾選擇器
        //:first  獲取第一個元素
        $('li:first').text('真的嗎?')
        //:last 獲取最後一個元素
        $('li:last').html('我是最後一個元素?')

        //:odd 匹配所有索引值爲奇數的元素,從0開始計數
        $('li:odd').css('color','green');
        //:even 匹配所有索引值爲偶數的元素,從0開始計數
        $('li:even').css('color','red')

        //:eq(index) 獲取給定索引值的元素 從0開始計數
        $('li:eq(1)').css('font-size','30px')
        //:gt(index)匹配所有大於給定索引值的元素
        $('li:gt(1)').css('font-size','40px')
        //:lt(index) 匹配所有小於給定索引值的元素
        $('li:lt(1)').css('font-size','40px')


    //4 屬性選擇器
        //標籤名[屬性名] 查找所有含有id屬性的該標籤名的元素
        $("li[id]").css('color','red')

        //[attr=value] 匹配給定的屬性是某個特定值的元素
        $('li[class=what]').css('font-size','30px')
        //[attr!=value] 匹配所有不含有指定的屬性,或者屬性不等於特定值的元素
        $('li[class!=what]').css('color','darkgreen')

        //匹配給定的屬性是以某些值開始的元素
        $('input[name^=username]').css('background','red')
        //匹配給定的屬性是以某些值結尾的元素
        $('input[name$=222]').css('background','yellow')
        //匹配給定的屬性是以包含某些值的元素
        $("button[class*='btn']").css('background','#0000FF')


    //5 篩選選擇器
        //獲取第n個元素 數值從0開始
        $('span').eq(0).css('font-size','30px')

        //first()獲取第一個元素
        $('span').first().css('background','red')
        //last()獲取最後一個元素
        $('span').last().css('background','red')

        //.parent() 選擇父親元素
        $('span').parent('.p1').css({width:'300px',height:'300px',background:'yellow'})
        //.children() 選擇孩子元素
        $('span').children('.p1').css({width:'300px',height:'300px',background:'yellow'})


        //.siblings()選擇所有的兄弟元素
        $('.list').siblings('li').css('color','red')
        //.find() 查找所有的後代元素
        $('div').find('button').css('background','#313131')

       //選項卡

        $(function(){
            $("#box1 li").click(function(){
                $(this).css('color', 'red');
                //恢復其他兄弟節點的樣式
                $(this).siblings('li').css('color','black');

            });         

5 動畫效果

        //動畫和定時器一樣,要先清理stop(),再開動畫
        //show 對角線變化來動態顯示隱藏的匹配元素,show(speed,callback)
            //speed:三種預定速度之一的字符串('slow','normal','fast')或表示動畫時長的毫秒值
            //callback:在動畫完成時執行的函數,執行一次
        $("#box").click(function(){
            $(".box").stop().show(10000, function(){
                $(".box").stop().hide(5000);
            });
        });
        //hide 表示隱藏顯示的元素, hide(speed,callback)
        //toggle 如果元素是可見的,切換爲隱藏的;如果元素是隱藏的,切換爲可見的。


        //slideDown 通過高度變化(向下增大)來到動態地顯示所有匹配的元素,在顯示完成後觸發一個回調函數
        //slideUp 通過高度變化(向上減小)來動態地隱藏所有匹配的元素,在隱藏完成後可選地觸發一個回調函數。
        //slideToggle 通過高度變化來切換所有匹配元素的可見性,並在切換完成後可選地觸發一個回調函數


        //fadeIn 通過不透明度的變化來實現所有匹配元素的淡入效果,並在動畫完成後可選地觸發一個回調函數。
            //這個動畫只調整元素的不透明度,也就是說所有匹配的元素的高度和寬度不會發生變化
        //fadeOut 通過不透明度的變化來實現所有匹配元素的淡出效果,並在動畫完成後可選地觸發一個回調函數。
        //fadeToggle 通過不透明度的變化來開關所有匹配元素的淡入和淡出效果,並在動畫完成後可選地觸發一個回調函數。
        //fadeTo 把所有匹配元素的不透明度以漸進方式調整到指定的不透明度。
        

        //animate 用於創建自定義動畫的函數, animate(params,[speed],[fn])
            //params:一組包含作爲動畫屬性和終值的樣式屬性和及其值的集合
            //speed:三種預定速度之一的字符串("slow","normal", or "fast")或表示動畫時長的毫秒數值
            //fn:在動畫完成時執行的函數,每個元素執行一次。
        var cc = {
            width: 100,
            height: 100,
            top: 200,
            left: 200,
        };
        $("#hh").click(function(){
            $(".box").stop().animate(cc, 5000);
        })

        //stop 停止所有在指定元素上正在運行的動畫, stop([clearQueue],[jumpToEnd])
            //clearQueue:如果設置成true,則清空隊列。可以立即結束動畫。
            //gotoEnd:讓當前正在執行的動畫立即完成,並且重設show和hide的原始樣式,調用回調函數等


        //delay 用來做延遲的操作,
        delay(1000);  //毫秒

6 屬性操作

        //1 html屬性操作(標籤):是對html文檔中的屬性進行讀取,設置和移除操作。比如attr()、removeAttr()
            //attrn設置屬性值或者 返回被選元素的屬性值
                //獲取值:attr()設置一個屬性值的時候 只是獲取值
                var id = $('div').attr('id')
                console.log(id)
                //設置值(不建議用此方式設置類名)
                //1.設置一個值 設置div的class爲box
                $('div').attr('class','box')
                //2.設置多個值,參數爲對象,鍵值對存儲
                $('div').attr({name:'hahaha',class:'happy'})
            //removeAttr 刪除某個屬性
                $("div").removeAttr("id")

            
        //2 DOM屬性操作(對象):對DOM元素的屬性進行讀取,設置和移除操作。比如prop()、removeProp()
            //prop 獲取在匹配的元素集中的第一個元素的屬性值.它是對當前匹配到的dom對象設置屬性。
            //removeProp 刪除
            
            
        //3 類樣式操作:是指對DOM屬性className進行添加,移除操作。比如addClass()、removeClass()、toggleClass()
            //addClass(添加多個類名)爲每個匹配的元素添加指定的類名。
            $('div').addClass("box"):添加一個類名
            $('div').addClass("box box2"):添加多個類名
            //removeClass 從所有匹配的元素中刪除全部或者指定的類。
            $('div').removeClass('box')移除指定的類
            $('div').removeClass()移除全部的類
            //toggleClass 如果存在(不存在)就刪除(添加)一個類。
            $('span').click(function(){
                //動態的切換class類名爲active
                $(this).toggleClass('active')
            })


        //4 值操作:是對DOM屬性value進行讀取和設置操作。比如html()、text()、val()
            //html 
                //獲取值:是獲取選中標籤元素中所有的內容
                var c = $('ul').html();
                //設置值:設置該元素的所有內容 會替換掉 標籤中原來的內容
                $('ul').html('<a href="#">百度一下</a>')
                    //可以使用函數來設置所有匹配元素的內容
                $('ul').html(function(){
                    return '哈哈哈'
                })
            //text
                //獲取值:獲取匹配元素包含的文本內容
                var a = $("div").text();
                //設置值:設置該所有的文本內容
                $("div").text("aaaaaaaa");
                注意:值爲標籤的時候 不會被渲染爲標籤元素 只會被當做值渲染到瀏覽器中

            //val
                //獲取值:用於表單控件中獲取值,比如input textarea select等等
                var a = $('input').val();
                //設置值:
                $('input').val('設置了表單控件中的值')

 7 文檔(標籤)操作

        //1、插入操作
            //1、父元素.append(子元素) 追加某元素 父元素最後位置中添加新的元素 string | element | jquery元素
            //如果直接的內容是當前頁面中的某些元素,那麼這些元素將從原位置上消失。簡言之,就是一個移動操作
            var oli = document.createElement('li');
            oli.innerHTML = '哈哈哈'
            $('ul').append('<li>1233</li>')  //string
            $('ul').append(oli)                //element
            $('ul').append($('#app'))        //jquery
            //2、子元素.appendTo(父元素) 追加到某元素 子元素添加到父元素
            $('<li>天王蓋地虎</li>').appendTo($('ul')).addClass('hu')

            //3、prepend() 前置添加, 添加到父元素的第一個位置
            $('ul').prepend('<li>我是第一個</li>')
            //4、prependTo 後置添加,第一個元素添加到父元素中
            $('<a href="#">路飛學誠</a>').prependTo('ul')

            //5、兄弟.after(兄弟) 在匹配的元素之後插入內容 與 兄弟.insertAfter(兄弟)
            $('ul').after('<h4>我是一個h3標題</h4>')
            $('<h5>我是一個h2標題</h5>').insertAfter('ul')

            //對於這種多行的,用反引號``
            var a = "alex";   //插入變量
            $('ul').after(`
                <li>
                <a href="">${a}</a>
                </li>
            `)

            //6、兄弟.before(兄弟) 在匹配的元素之前插入內容 與 兄弟.insertBefor(兄弟)
            $('ul').before('<h3>我是一個h3標題</h3>')
            $('<h2>我是一個h2標題</h2>').insertBefore('ul')


        //2、複製操作
            $('button').click(function() {
             // 1.clone():克隆匹配的DOM元素並且選中這些克隆的副本。
             // 2.clone(true):元素以及其所有的事件處理並且選中這些克隆的副本(副本具有與真身一樣的事件處理能力)
              $(this).clone(true).insertAfter(this);
            })


        //3、替換操作
            //1、被替換.replaceWith(替換值):將所有匹配的元素替換成指定的HTML或DOM元素。
            $('h5').replaceWith('<a href="#">hello world</a>')
            $('h5').replaceWith($('#app'));

            //2、替換值.replaceAll(被替換):用匹配的元素替換掉所有
            $('<br/><hr/><button>按鈕</button>').replaceAll('h4')


        //4、刪除操作
            //1、remove() 刪除節點後,事件也會刪除(刪除了整個標籤)
            $('ul').remove();

            //2、detach() 刪除節點後,事件($btn)會保留
             var $btn = $('button').detach()
             //此時按鈕能追加到ul前
             $('ul').prepend($btn)

            //3、empty(): 清空元素中的所有後代節點
            //清空掉ul中的子元素,保留ul
            $('ul').empty()

 8 表單操作

<body>
    <button>lala</button>
    <form action="">
            <input type="radio" name="sex"  value="112" />男
            <input type="radio" name="sex"  value="11" checked="" />女
            <input type="radio" name="sex"  value="11" />gay

            <input type="checkbox" value="a" checked=""/>吃飯
            <input type="checkbox" value="b" checked=""/>睡覺
            <input type="checkbox" value="c" checked=""/>打豆豆

            <select name="timespan" id="timespan" class="Wdate"   >  
                <option value="1">8:00-8:30</option>  
                <option value="2">8:30-9:00</option>  
                <option value="3">9:00-9:30</option>  
            </select>  
            <input type="text" name="" id="" value="111" />
    </form>
    <script type="text/javascript" src="jquery-3.4.0.js"></script>  
    <script type="text/javascript">
        $(function(){
            //單選框
            //獲取值  被選中的, :checked
            console.log($("input[type=radio]:checked").val());
            //設置值
            $("input[type=radio]:checked").val('hahahaha');
            console.log($("input[type=radio]:checked").val());

            //複選框
            console.log($('input[type=checkbox]:checked').val());   //a 第一個被選中的

            //下拉表單
            //獲取值  被選中的, :selected
            console.log($("#timespan option:selected").val());
            //設置值
            $("button").click(function(){
                $("select option").get(2).selected = true;   //get的是索引值
            })

            //文本框
            console.log($("input[type=text]").val())//獲取文本框中的值
            //設置值
            $('input[type=text]').val('試試就試試')
            
        });
    </script>
</body>

9 位置操作

        //position
        //weight 取得匹配元素當前計算的寬度值
            //獲取值
            $('#box').width()
            //設置值
            $('#box').width(300)

        //height 取得匹配元素當前計算的高度值
            //獲取值
            $('#box').height()
            //設置值
            $('#box').height(300)

        //innerHeight 獲取第一個匹配元素內部區域高度(包括補白、不包括邊框)
        console.log($('#box').innerHeight())
        //innerWidth 獲取第一個匹配元素內部區域寬度(包括補白、不包括邊框)
        console.log($('#box').innerWidth())
        //outerHeight 獲取第一個匹配元素外部高度(默認包括補白和邊框)
        console.log($('#box').outerHeight())
        //outerWeight 獲取第一個匹配元素外部寬度(默認包括補白和邊框)
        console.log($('#box').outerWidth())


        //offset
        //offset 獲取匹配元素在當前視口的相對偏移,返回的對象包含兩個整型屬性:top 和 left
        $("p").offset()
        $('div').offset().top
        $("p").offset().left
        

        //scoll
        //scrollTop 獲取匹配元素相對滾動條頂部的偏移 文檔被捲起的像素值
        //scrollLeft 獲取匹配元素相對滾動條左側的偏移 文檔被捲起的像素值
        $(document).scrollTop()
        $(document).scrollLeft()

        //監聽文檔滾動的jquery方法
        $(document).scroll(function(){
            console.log($(document).scrollTop())
            console.log($(document).scrollLeft())
         })

10 事件流

//“DOM2級事件”規定的事件流包括三個階段:
        //1 事件捕獲階段
        //2 處於目標階段
        //3 事件冒泡階段

 

程序:
        var oBtn = document.getElementById('btn');

        oBtn.addEventListener('click',function(){       //默認爲false,即不顯示捕獲階段
            console.log('btn處於事件捕獲階段');
        }, true);
        oBtn.addEventListener('click',function(){
            console.log('btn處於事件冒泡階段');
        }, false);

        document.addEventListener('click',function(){
            console.log('document處於事件捕獲階段');
        }, true);
        document.addEventListener('click',function(){
            console.log('document處於事件冒泡階段');
        }, false);

        document.documentElement.addEventListener('click',function(){
            console.log('html處於事件捕獲階段');
        }, true);
        document.documentElement.addEventListener('click',function(){
            console.log('html處於事件冒泡階段');
        }, false);

        document.body.addEventListener('click',function(){
            console.log('body處於事件捕獲階段');
        }, true);
        document.body.addEventListener('click',function(){
            console.log('body處於事件冒泡階段');
        }, false);

結果:

document處於事件捕獲階段
html處於事件捕獲階段
body處於事件捕獲階段
btn處於事件捕獲階段
btn處於事件冒泡階段
body處於事件冒泡階段
html處於事件冒泡階段
document處於事件冒泡階段

冒泡事件

        //給按鈕綁定事件,在所有事件回調函數中有默認的事件對象,且爲js對象
        $(".father button").click(function(event){
            console.log(event);     

            //event.stopPropagation();   //阻止冒泡產生
            console.log($(this).text())   //發生事件冒泡,同時打印出父級事件的內容
        })

        $(".father").click(function(){
            alert("父親")
        })

 11 其他方法

        //mouseover  mouseout穿過被選元素及其子元素都會觸發
        $(".father").mouseover(function(){
            console.log("移入了");     
        })

        $(".father").mouseout(function(){
            console.log("移出了");
        })

        //mouseenter mouseleave只有穿過被選元素纔會觸發
        $(".father").mouseenter(function(){
            console.log("移入了");     
        })

        $(".father").mouseleavet(function(){
            console.log("移出了");
        })

        //鼠標選中focus,失去選中blur
        $("input[type=text]").focus(function(){
            console.log("獲取焦點");
        })

        $("input[type=text]").blur(function(){
            console.log("失去焦點");
        })

        //捕獲鍵盤按下keydown,鍵盤彈起keyup
        $('input[type=text]').keyup(function(e){
            console.log(e.keyCode);   //e爲輸入字符
        }) 

             //鼠標移動mousemove

            //鼠標按下mousedown,鼠標彈起mouseup

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