jQuery-Pink

一、jQuery基础

1.JavaScript库

是一个封装好的集合(方法和函数),简单理解就是一个JS文件,里面对原生JS进行了封装且可以高效的使用这些封装好的功能

比如jQuery就是为了方便了操作DOM,里面基本上都是函数(方法)

2.jQuery概念

jQuery是一个快速的、简洁的JavaScript库设计总是就是提倡更少的代码、更多的功能实现

3.优点

  • 轻量级。核心文件几十kb,不会影响页面加载速度
  • 跨浏览器兼容
  • 链式编程、隐式迭代
  • 对事件、动画、样式支持,大大简化了DOM操作
  • 支持插件开发
  • 开源免费

4.jQuery入口函数

相当于原生JS中的DOMContentLoaded,不同于原生JS中的load事件

<body>
    <style type="text/css">
        div{
            background-color: pink;
            width: 200px;
            height: 200px;
        }
    </style>
    <script type="text/javascript">
        //script写在html标签之前
        //第一种方式,等待DOM元素加载完毕后执行里面的代码
        $(document).ready(function(){
            //jquery隐藏div的方法
            $('div').hide();
        })
        //第二种方式,等待DOM元素加载完毕后执行里面的代码
        $(function(){
            $('div').hide();
        })
    </script>
    <div></div>
</body>

5.jQuery的顶级对象$

是 j Q u e r y 的 别 称 , 这 两 个 等 同 ; 为 了 使 用 方 便 , 通 常 直 接 使 用 是jQuery的别称,这两个等同;为了使用方便,通常直接使用 jQuery使便使

是 j Q u e r y 的 顶 级 对 象 , 相 当 于 原 生 J S 中 的 w i n d o w 。 把 元 素 利 用 是jQuery的顶级对象,相当于原生JS中的window。把元素利用 jQueryJSwindow包装成jQuery对象就可以直接调用jQuery方法

6.jQuery对象与DOM对象

DOM对象:利用原生JS获取来的对象就是DOM对象

jQuery对象:jQuery方法获取的元素就是jQuery对象;本质是利用$对DOM对象包装后产生的对象(伪数组形式存储)

6.1 区别

<body>
    <div></div>
    <script type="text/javascript">
        //利用DOM方式获取的对象就是DOM对象
        var div = document.querySelector('div');
        //利用jQuery方法获取的对象就是jQuery对象
        $('div'); //返回的值是一个伪数组
    </script>
</body>

jQuery对象只能使用jQuery方法,DOM对象则使用原生的JavaScript属性和方法

6.2 相互转换

两个对象之间可以相互转换

因为原生JS比jQuery更大,原生的一些属性和方法jQuery没有被封装,要使用这些属性和方法需要把jQuery对象转换为DOM对象才能使用

6.2.1 DOM–>jQuery

直接将DOM对象放入 的 括 号 内 即 可 : 的括号内即可: (DOM)

<body>
    <div></div>
    <script type="text/javascript">
        //获取DOM对象
        var divs = document.querySelector('div');
        //DOM转换为jQuery对象,直接写标签名也需要加上 ‘’ 号
        $('divs');
    </script>
</body>
6.2.2 jQuery–>DOM

因为jQuery对象获取返回的是一个伪数组:

  • $(‘div’)[index] index是索引号
  • $(‘div’).get(index)
<body>
    <div></div>
    <script type="text/javascript">
        //获取 jQuery 对象
        $('div');
        //jQuery对象转换为DOM对象
        $('div')[0]
        $('div').get(0)
    </script>
</body>

二、jQuery常用API

1.jQuery选择器

原生JS选择器获取元素对象的方式很多,杂而繁多,兼容性情况不一致,所以jQuery做了封装使获取元素标准统一

1.1 jQuery基础选择器

$(“选择器”):参数直接写CSS选择器即可,打印出来值都是伪数组形式

名称用法描述
ID选择器$("#id")获取指定ID的元素
全选选择器$("*")匹配所有元素
类选择器$(".class")获取同一类class的元素
标签选择器$(“div”)获取同一类标签的元素
并集选择器$(“div,p,li”)选取多个元素
交际选择器$(“li.current”)交集元素
<body>
    <div id = "div" class="divs"></div>
    <ul>
        <li></li>
    </ul>
    <script type="text/javascript">
        console.log($("#div"));
        console.log($(".divs"));
        //获得li标签
        console.log($("ul li"));
    </script>
</body>

1.2 层级选择器

名称用法描述
子代选择器$(“ul>li”)获取儿子级别的元素
后代选择器$(“ul li”)获取ul标签下的所有li元素

1.3 隐式迭代

遍历内部DOM元素(伪数组形式存储)的过程叫做隐式迭代

简单理解:为匹配到的所有元素进行循环遍历执行相应的方法,简化操作方便调用

<body>
    <ul>
        <li>内容</li>
        <li>内容</li>
        <li>内容</li>
    </ul>
    <script type="text/javascript">
        //选择到li元素,为四个元素同时添加背景颜色
        //运用隐式迭代,不用为每个元素进行挨个背景颜色操作
        $("li").css("background","red");
    </script>
</body>

1.4 筛选选择器

语法用法描述
:first$(“li:first”)获取第一个li元素
:last$(“li:last”)获取最后一个li元素
:eq(index)$(“li:eq(2)”)获取索引号为2的li元素,索引号从0开始
:odd$(“li:odd”)选择索引号为奇数的元素
:even$(“li:even”)选择索引号为偶数的元素

1.5 筛选方法

方法名用法描述
parent()$(“li”).parent()查找父级
children(selector)$(“ul”).children(“li”)相当于$(“ul>li”),最近子级
find(selector)$(“ul”).parent(“li”)相当于$(“ul li”),后代选择器
siblings(selector)$(“li”).siblings(“li”)查找兄弟节点,不包括本身
nextAll()$(".first").nextAll()查找当前元素之后所有同级
prevtAll()$(".last").prevtAll()查找当前元素之后所有同级
eq(index)$(“li”).eq(2)与:eq(index)效果相同
hasClass(“类名”)$(“li”).hasClass("")判断是否有指定类
<body>
    <ul>
        <li>内容</li>
        <li>内容</li>
        <li>内容</li>
    </ul>
    <script type="text/javascript">
        //获得li标签的父标签
        console.log($("li").parent());
        //获得ul的子标签
        console.log($("ul").children("li"));
        //后代选择器
        console.log($("ul").find("li"));
        //除了自己的同级元素
        $("li:eq(1)").siblings("li").css("background","red");
        //推荐使用此方法而不是选择器,因为可以写入变量
        $("li").eq(1).css("background","green");
        //判断是否含有指定类
        console.log($("ul").hasClass("name"))
    </script>
</body>

1.6 jQuery排他思想

<body>
    <button>按钮</button>
    <button>按钮</button>
    <script type="text/javascript">
        //jquery隐式迭代自动为所有的按钮标签添加事件
        $("button").click(function(){
            //设置自己
            $(this).css("background","red");
            //干掉其他人
            //当前对象(button)的兄弟标签(button)设置样式
            $(this).siblings("button").css("background","");
        });
    </script>
</body>

1.7 案例显示图片

$(this).index():获取当前对象的索引号

$(“div”).show():显示div

$(“div”).hide():隐藏

$(“button”).mouseover(function(){ }) :添加鼠标经过事件

<body>
    <style type="text/css">
        img{
            width: 600px;
            height: 400px;
            display: none;
        }
    </style>
    <button>按钮</button>
    <button>按钮</button>
    <button>按钮</button>
    <br>
    <img src="imgs/20201115.jpg">
    <img src="imgs/20201116.jpg">
    <img src="imgs/20201117.jpg">
    <script type="text/javascript">
        //添加鼠标经过事件
        $("button").mouseover(function(){
            $(this).css("background","red");
            $(this).siblings("button").css("background","");
            //index()方法获得的索引号是从1开始
            var index = $(this).index() -1;
            //获得图片元素,内容存储为伪数组形式,索引号从 0 开始 
            $("img").eq(index).show();
            //$("img").eq(index).siblings("img").css("display","none") 这个也可让图片显示,较麻烦
            $("img").eq(index).siblings("img").hide();
        })
    </script>
</body>

2.jQuery样式操作

jQuery 可以使用 CSS方式来修改 简单元素样式 ;也可以 操作类 ,修改多个样式

2.1 操作CSS方法

①参数只写属性名,返回的是属性值:$(this).css(“color”)

console.log($("div").css("width"))

②参数是属性名、属性值,逗号分隔,是设置一组属性,属性必须使用引号(值为数字可以不用跟单位和引号):$(this).css(“color”,“red”)

$("div").css("width","600px");
//属性名必须加上引号,否则会把它当成一个变量
$("div").css(heigth,"600px");

③参数可以是对象的形式,方便设置多组样式。属性名和属性值用冒号隔开,属性可以不用加引号

$("div").css({
    //对象的方式属性名可以不加上引号
    "height":"600px",
    width:300, //数字可以不加
    //复合属性必须遵守驼峰命名法
    backgroundColor:"red" //颜色必须加引号
});

2.2 设置类样式方法

$(“div”).click(function(){ }):添加点击事件

①$(this).addClass(“current”):添加类(类名即可不需要 “ . ”,因为addClass已经表明为类)

<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
        }
        .current{
            background-color: red;
        }
    </style>
    <div></div>
    <script type="text/javascript">
        $("div").click(function(){
            $(this).addClass("current");
        })
    </script>
</body>

②$(this).removeClass(“current”):移除类样式

<div class="current"></div>
<script type="text/javascript">
    $("div").click(function(){
        $(this).removeClass("current");
    })
</script>

③$(this).toggleClass(“current”):更改类样式

<div></div>
<script type="text/javascript">
    $("div").click(function(){
        $(this).toggleClass("current");
    })
</script>

2.3 类操作与className区别

原生JS中的className会覆盖元素原先里面的类名;而类操作只是对指定类进行操作,不影响原先的类名(相当于追加)

3.jQuery效果

效果即为动画效果;jQuery封装了许多动画效果

3.1 常用效果

效果方法
显示隐藏show()/hide()/toggle()
滑动slideDown()/slideUp()/slideToggle()
淡入淡出fadeIn()/fadeOut()/fadeToggle()/fadeTo()
自定义动画animate()

3.2 显示隐藏

①show ( [speed , [ easing ] , [ fn ]] )/ hide ([speed , [ easing ] , [ fn ]])/toggle ([speed , [ easing ] , [ fn ]])

  1. 参数都可以省略,无动画直接显示
  2. speed:三种速度的字符串(“slow”,“normal”,“fast”)或者使用毫秒值如:1000
  3. easing:(Optional)用来指定切换效果,默认为“swing”,可用参数为“linear”
  4. fn:回调函数,动画执行完毕后执行回调函数,每个元素执行一次
<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
        }
    </style>
    <button>显示</button>
    <button>隐藏</button>
    <button>替换</button>
    <div></div>
    <script type="text/javascript">
        //一般都会省略参数
        //测试了两种获取元素的方式,推荐使用第二种:用方法的方式获取
        $("button:eq(0)").click(function(){
            //一秒钟后显示
            $("div").show(1000,function(){
                alert("回调函数")
            });
        })
        $("button").eq(1).click(function(){
            //速度类似于一秒钟 后隐藏
            $("div").hide("fast");
        })
        //替换即为 显示-->隐藏-->显示	
        $("button").eq(2).click(function(){
            $("div").toggle()
        })
    </script>
</body>

3.3 滑动效果

slideDown( [speed , [ easing ] , [ fn ]] )/slideUp( [speed , [ easing ] , [ fn ]] )/slideToggle( [speed , [ easing ] , [ fn ]] )

<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
        }
    </style>
    <button>显示</button>
    <button>隐藏</button>
    <button>替换</button>
    <div></div>
    <script type="text/javascript">
        $("button:eq(0)").click(function(){
            //一秒钟后显示
            $("div").slideDown(1000);
        })
        $("button").eq(1).click(function(){
            //速度类似于一秒钟 后隐藏
            $("div").slideUp("fast");
        })
        //替换即为 显示-->隐藏-->显示	
        $("button").eq(2).click(function(){
            $("div").slideToggle()
        })
    </script>
</body>

3.4 事件切换

$(“button”).hover([over],out):就是事件经过离开的复合方法

  • over:鼠标移动到元素上要触发的函数(相当于mouseenter)
  • out:鼠标移出元素要触发的函数(相当于mouseleave)

①方法中两个参数:

<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
            display: none;
        }
    </style>
    <button>显示</button>
    <div></div>
    <script type="text/javascript">
        $("button").hover(
            //参数一:over
            function(){
                $("div").slideDown();
            },
            //参数热:out
            function(){
                $("div").slideUp();
            });
    </script>
</body>

②继续简化,一个参数函数函数中使用切换方法

<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
            display: none;
        }
    </style>
    <button>显示</button>
    <div></div>
    <script type="text/javascript">
        $("button").hover(function(){
            //正好契合Toggle的用法,秒
            $("div").slideToggle();
        });
    </script>
</body>

3.5 动画队列与停止排队

动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队(鼠标不停出发动画,动画排队挨着执行即使鼠标已经离开许久)

停止排队的方法:stop();

  1. stop()用于停止动画或者效果
  2. 应写在动画或者效果之前,相当于停止上一次动画或效果
<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
            display: none;
        }
    </style>
    <button>显示</button>
    <div></div>
    <script type="text/javascript">
        $("button").hover(function(){
            //stop要写在动画的前面
            $("div").stop().slideToggle();
        });
    </script>
</body>

3.6 淡入淡出效果

fadeIn( [speed , [easing] , [ fn ]] )/fadeOut( [speed , [easing], [fn]] )/fadeToggle( [speed, [easing] , [fn]] )同上

修改透明度:fadeTo( [speed , opacity,[ easing ] , [ fn ]] )

  1. opacity透明度必须写上,取值为0~1
  2. 其他参数同上
<body>
    <style type="text/css">
        div{
            width: 400px;
            height: 400px;
            background-color: pink;
        }
    </style>
    <button>淡入</button>
    <button>淡出</button>
    <button>替换</button>
    <button>指定透明度</button>
    <div></div>
    <script type="text/javascript">
        $("button:eq(0)").click(function(){
            $("div").fadeIn(1000);
        })
        $("button").eq(1).click(function(){
            $("div").fadeOut("fast");
        })
        $("button").eq(2).click(function(){
            $("div").fadeToggle()
        })
        $("button").eq(3).click(function(){
            //速度和透明度必须写,否则效果不出
            $("div").fadeTo(1000,0.5)
        })
    </script>
</body>

3.7 图片变暗

核心代码只有两句,其他皆为样式设计罢了

<body>
    <style type="text/css">
        body{
            background-color: black;
        }
        div{
            margin-top: 100px;
            margin-left: 400px;
            width: 600px;
            height: 400px;
        }
        img{
            width: 300px;
            height: 180px; 
        }
        li{
            display: block;
            float: left;
        }
    </style>
    <div>
        <ul>
            <li><img src="imgs/20201115.jpg" ></li>
            <li><img src="imgs/20201116.jpg" ></li>
            <li><img src="imgs/20201117.jpg" ></li>
            <li><img src="imgs/20201118.jpg" ></li>
        </ul>
    </div>
    <script type="text/javascript">
        //功能实现是因为背景是黑色,标签透明度越高图片就会些许变黑
        //如果使用img,则即使鼠标经过,图片也不会亮度变暗
        $("li").hover(
            function(){
                //鼠标移入,其他兄弟标签透明度调为 0.5
                $(this).siblings().stop().fadeTo(400,0.5);
            },
            function(){
                //鼠标移出,其他兄弟标签透明度调为 1
                $(this).siblings().stop().fadeTo(400,1);
            }
        );
    </script>
</body>

3.8 自定义动画

animate(params,[speed],[easing],[fn])

  1. params:想要更改的样式属性,以对象形式传递(必须写)。属性名可以不用带引号,若为复合属性需用驼峰命名法
  2. 其他参数同上无须赘述
<body>
    <style type="text/css">
        div{
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
    <button>点击</button>
    <div></div>
    <script type="text/javascript">
        $("button").click(function(){
            //动画方法中的参数必须使用对象形式
            $("div").animate({
                left:800,
                top:400,
                //改变图片透明度
                opacity:0.5,
                //改变大小
                width:200
            },500)
        });
    </script>
</body>

4.jQuery属性操作

4.1 设置/获取元素固有属性值

①$(“标签”).prop(“属性名”):获取标签的指定属性名称

②$(“标签”).prop(“属性名”,“属性值”):设置属性值

<body>
    <a href="#">链接</a>
    <input type="checkbox"/>
    <script type="text/javascript">
        //获取超链接的href属性值
        console.log($("a").prop("href"));
        $("input").change(function(){
            //当复选框状态改变时获取其属性值
            console.log($(this).prop("checked"));
        })
    </script>
</body>

4.2自定义属性

自定义属性只能通过attr()获取

<body>
    <a href="#" index = "1">链接</a>
    <script type="text/javascript">
        //prop()获取不到a标签的index属性
        console.log($("a").prop("index"));
        //attr()可以获取到a标签的自定义属性
        console.log($("a").attr("index")) //类似原生JS的 setAttribute()
        //attr()设置自定义属性     
        $("a").attr("index",5) //类似于原生JS的 getAttribut()
    </script>
</body>

4.3 数据缓存data

4.3.1 设置获取属性

data()方法可以在指定的元素上存取数据,并不会修改DOM元素结构;一但页面刷新,之前存放的数据都将被移除

<body>
    <a href="#" index = "1">链接</a>
    <script type="text/javascript">
        //存放数据,数据放在了内存中标签内部并没有
        $("a").data("uanme","jack");
        //获取标签上的数据
        console.log($("a").data("uanme"))
    </script>
</body>
4.3.2设置获取H5自定义属性
<body>
    <a href="#" data-index = "1">链接</a>
    <script type="text/javascript">
        //prop()获取不到
        console.log($("a").prop("data-index"))
        //attr()也可以获取H5自定义属性,返回值为字符串类型
        console.log($("a").attr("data-index"))
        //因为使用data()方法,所以属性名可以省略data关键字
        //返回值为数字型
        console.log($("a").data("index"))
    </script>
</body>

4.4 全选按钮实例

$(".Singal:checked"):此方法可以获得复选框被选中的个数

<body>
    全选按钮①:<input type="checkbox" class="All"/><br>
    <input type="checkbox" class="Singal"/>选择一
    <input type="checkbox" class="Singal"/>选择一
    <input type="checkbox" class="Singal"/>选择一<br>
    全选按钮②:<input type="checkbox" class="All"/>
    <script type="text/javascript">
        //只要按钮状态发生改变就触发事件
        $(".All").change(function(){
            //将全选框的状态赋予给单选框
            //使用并集选择器,让所有的全选按钮也发生改变
            $(".Singal,.All").prop("checked",$(this).prop("checked"))
        });
        //单选框状态改变就触发事件
        $(".Singal").change(function(){
            //判断单选按钮个数是否为3,
            if($(".Singal:checked").length == ($(".Singal").length)){
                $(".All").prop("checked",true);
            }else{
                $(".All").prop("checked",false);
            }
        })
    </script>
</body>

5.jQuery内容文本值

主要针对元素内容和表单的值操作

5.1普通元素内容html()

相当于原生innerHtml;方法参数为空则为获取标签内容,参数有值则为设置标签内容

<body>
    <div>
        <span>我是内容</span>
    </div>
    <script type="text/javascript">
        //此种获取将HTML标签也获取到
        console.log($("div").html())
        //修改html中的值
        $("div").html("123");
    </script>
</body>

5.2 普通元素文本内容text()

相当于原生innerText

<body>
    <div>
        <span>我是内容</span>
    </div>
    <script type="text/javascript">
        //仅仅获取元素内容,标签不获取
        console.log($("div").text())
        //直接修改html标签内部内容
        $("div").text("123");
    </script>
</body>

5.3 表单内容值val()

<body>
    <input type="text" />
    <script type="text/javascript">
        //获取输入框中的值
        console.log($("input").val())
        //修改输入框中的值
        $("input").val("123");
    </script>
</body>

5.4 表单值增减

<body>
    商品数量:<input type="text" value="1"/><br />
    <button>添加数量</button>
    <button>减少数量</button>
    <script type="text/javascript">
        $("button").eq(0).click(function(){
            var num = $("input").val();
            $("input").val(++num);
        })
        $("button").eq(1).click(function(){
            var num = $("input").val();
            if(num==1){
                return false;
            }else{
                $("input").val(--num);
            }
        })
    </script>
</body>

6.jQuery元素操作

主要是遍历、创建、添加、删除元素操作

6.1 遍历元素

jQuery为元素设置了隐式迭代,如果想要对单个元素样式进行更改就需要用到便遍历

①$(‘div’).each(function(index,domEle){ }) :此div元素进行遍历

<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <script type="text/javascript">
        //设置数组,里面存放颜色
        var color = ["red","green","blue"]
        //each遍历方法
        $('div').each(function(i,domEle){
            //函数第一个参数一定是索引号(jQuery自动添加)
            var index = i;
            //第二个参数是DOM对象,使用jQuery方法必须转换对象
            $(domEle).css('color',color[index]);
        })
    </script>
</body>

. e a c h ( .each( .each((‘div’),function(index,domEle){ }):先遍历,指明遍历对象为div元素

**方便对于数据的遍历,处理数据(可以遍历所有数据);**上一个方法不方便

<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <script type="text/javascript">
        //设置数组,里面存放颜色
        var color = ["red","green","blue"]
        //each遍历方法
        $.each($('div'),function(i,domEle){
            //函数第一个参数一定是索引号(jQuery自动添加)
            var index = i;
            //第二个参数是DOM对象,使用jQuery方法必须转换对象
            $(domEle).css('color',color[index]);
        })
    </script>
</body>

6.2 创建元素

$(’

  • ’):动态创建了li标签;添加了元素不会显示,还需要添加元素

    6.3 添加元素

    6.3.1 内部添加

    element.append(‘内容’):把内容放入匹配元素内部的后面,类似原生 appendChild

    <body>
        <ul>
            <li>本来就有的li标签</li>
        </ul>
        <script type="text/javascript">
            //创建li标签
            var li = $('<li>动态创建的li标签</li>');
            //添加元素:内部添加
            $('ul').append(li); //类似于 appendChild原生JS方法
            //添加元素到内容前面
            $('ul').prepend(li); 
        </script>
    </body>
    
    6.3.2 外部添加

    element.after(‘内容’): 把内容放在目标元素的后面

    element.before(‘内容’): 把内容放在目标元素的前面

    <body>
        <div>原本就存在</div>
        <script type="text/javascript">
            var div =$('<div>动态生成</div>')
            //添加到内容后面
            $('div').after(div);
            //添加到内容前面
            $('div').before(div);
        </script>
    </body>
    

    内部添加元素生成之后,它们是父子关系

    外部元素添加生成之后,它们是兄弟关系

    6.4 删除元素

    element.remove(): 删除匹配元素本身

    element.empty(): 删除匹配元素集合中的所有子节点,本身元素不删除

    element.html(’’) :清空匹配元素内容(内容为空字符串表示为清空)

    <body>
        <div>原本就存在</div>
        <script type="text/javascript">
            //删除了div元素
            $('div').remove();
        </script>
    </body>
    

    7.jQuery事件

    7.1 事件注册

    element.事件(function(){ }):创建方式与原生JS语法大致相同

    但是创建事件只能创建单个事件,不能创建多个事件

    7.2 事件处理

    on()事件处理:在匹配的元素上绑定一个或多个事件的事件处理函数

    element.on(events,[selector],fn):

    1. events:一个或者多个用空格分隔的事件类型,例如 "click"或者“keydown”
    2. selector:元素的子元素选择器
    3. fn回调函数
    <body>
        <style type="text/css">
            div{
                background-color: pink;
                width: 200px;
                height: 200px;
            }
        </style>
        <div></div>
        <script type="text/javascript">
            //on()处理函数,可以使用对象方式创智
            $('div').on({
                mouseenter:function(){
                    $(this).css("background","red")
                },
                mouseleave:function(){
                    $(this).css("background","green")
                }
            })
            //on()处理函数
            $('div').on("mouseenter mouseleave",function(){
                alert("11")
            })
        </script>
    </body>
    

    on()处理函数优点:

    1. 可以绑定多个事件
    2. 可以事件委派操作(将原来加在子元素身上的事件绑定在父元素身上,就是将事件委派给父元素)
    3. 动态创建的元素,click()无法绑定事件,on()可以为动态生成的元素绑定事件
    <body>
        <ul>
            <li>1</li>
            <li>2</li>
        </ul>
        <script type="text/javascript">
            //先绑定了事件,再创建标签
            //事件绑定在ul标签上,触发事件的对象为li
            $('ul').on('click','li',function(){
                alert('1')
            })
            //即使动态创建的li标签也可以绑定事件
            var li = $('<li></li>')
            $('ul').append(li)
        </script>
    </body>
    

    7.3 事件解绑

    off()方法可以移除通过on()方法添加的事件处理程序

    $(‘div’).off() :将div标签上的所有事件全部解绑

    $(‘div’).off(‘click’) :将div标签上的点击事件解绑

    $(‘ul’).off(‘click li’) :将div标签上的委托点击事件

    one()绑定事件只会触发一次

    <body>
        <ul>
            <li>1</li>
            <li>2</li>
        </ul>
        <script type="text/javascript">
            //事件绑定在ul标签上,触发事件的对象为li
            //只会触发一次,第二次不会触发
            $('ul').one('click','li',function(){
                alert('1')
            })
        </script>
    </body>
    

    7.4 自动触发事件

    方式一:element.事件()

    <body>
        <div>按钮</div>
        <script type="text/javascript">
            //为div标签绑定事件
            $('div').one('click',function(){
                alert('1')
            })
            //直接调用,自动加载事件
            $('div').click();
        </script>
    </body>
    

    方式二:element.trigger():有些事件需要自动触发,不必再用鼠标触发

    <body>
        <div>按钮</div>
        <script type="text/javascript">
            //为div标签绑定事件
            $('div').one('click',function(){
                alert('1')
            })
            //直接调用,自动加载事件
            $('div').trigger('click')
        </script>
    </body>
    

    方式三:element.triggerHandler(type):与上面两个区别为不会触发元素默认行为(光标不会闪烁)

    <body>
        输入框:<input type="text"/>
        <script type="text/javascript">
            $('input').on('focus',function(){
                $(this).val('你好么');
            })
            //自动调用焦点事件
            $('input').triggerHandler('focus')
        </script>
    </body>
    

    7.5 事件对象

    与原生JS没有什么区别(函数中的参数为 e)

    8.jQuery其他事件

    8.1 jQuery拷贝对象

    把某个对象拷贝(合并)给另外一个对象使用,此时可以使用 $.extend() 方法

    $.extend([deep],target,object,[objectN]):

    1. deep:true表示为深拷贝,默认为浅拷贝
    2. target:要被拷贝的目标
    3. object1:待拷贝的第一个对象
    4. 浅拷贝:将拷贝的内容地址给了目标对象,目标对象修改数据为影响原先对象中的值(对象地址复制)
    5. 深拷贝:将数据完整的复制给目标对象,而不是地址(重新开辟一个空间并将地址赋予目标对象,不会影响另一个)
    <body>
        <script type="text/javascript">
            //目标中没有属性直接赋予,相同名字的属性覆盖
            var target ={
                id:2
            };
            var obj= {
                id:1,
                age:18,
                address:{
                    info:'河南省'
                }
            }
            //浅拷贝
            $.extend(target,obj);
            console.log(target)
            //深拷贝
            $.extend(true,target,obj);
        </script>
    </body>
    

    8.2 多库共存

    $也许会与JS库引起冲突,完成同时存在且不会冲突的问题

    直接将$符号写为 jQuery 或者直接释放jQuery对 $ 的控制权

    8.3 jQuery插件

    插件是依赖于jQuery来完成,所以必须先引入jQuery文件

    9.jQuery尺寸、位置操作

    9.1 尺寸

    语法用法
    width()/height()匹配元素高度、宽度值 只算width/height
    innerWidth()/innerHeight匹配元素宽度、高度值 包含padding
    outerWidth()/outerHeight()匹配元素宽度、高度值 包含padding、border
    outerWidth(true)/outerHeight(true)匹配元素宽度、高度值 包含padding、border、margin

    9.2 位置

    主要分为三个:offset()/postion()/scrollTop()、scrollLeft() :设置值则直接赋值

    offset():设置返回被选取元素相对于 文档 的便宜坐标,跟父级没有关系 ( ′ d i v ′ ) . o f f s e t ( ) / ('div').offset()/ (div).offset()/(‘div’).offset().top

    postion():设置返回被选取元素相对于 带有定位的父级 便宜坐标,如果没有父级都没有定位则按照文档为主;只能获取不能设置

    scrollTop()/scrollLeft():设置返回被选取元素 被卷曲的头部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值