jQuery概述

  • jQuery是一个js库,封装了很多方法和函数
  • j是JavaScript;Query是查询,意思是查询js,把js中的dom做封装可以快速使用里面的功能

jQuery的基本使用

jQuery的入口函数

  • 基本语法$(‘xxx’).xxx

    1
    $('div').hide();
  • 页面执行代码的顺序DOM→js,两种方法解决

    1
    2
    3
    4
    5
    6
    7
    8
    9
    会等待页面DOM加载完之后在执行js
    第一种
    $(document).reday(function(){
    xxx;
    })
    第二种
    $(function(){
    xxx;
    })

jQuery的顶级对象

  • $是jQuery的顶级对象
  • 可以代表jQuery 简而言之写的时候两者可以互换

jQuery对象和DOM对象

  • 用原生js获取过来的对象叫做dom对象,dom对象只能使用原生的js方法

    1
    var jsduixiang = document.querySelector('div');
  • 用jQuery方法获取过来的对象是jQuery对象,本质是通过$把dom元素进行了包装,且也只能使用jQuery方法

    1
    $('div');
  • dom对象转换成jQuery对象

    1
    2
    3
    直接调用
    $(dom对象)
    $('video')
  • jQuery对象转换成dom对象

    1
    2
    3
    4
    方法1 $(xxx)[index]
    原因是他是伪数组
    $('video')[0].play()
    方法2 $(xxx).get(0).play()

jQuery 常用API

jQuery基础选择器

  • 获取标准 $(‘选择器’) 里面选择器直接写css选择器

    1
    2
    3
    4
    5
    6
    id选择器 $("#id")
    全选择器 $("*")
    类选择器 $(".class")
    标签选择器 $("div")
    并集选择器 $("div,p,li")
    交集选择器 $("li.current")

jQuery层级选择器

  • 例子

    1
    2
    子代选择器 $("ul>li")
    后代选择器 $("ul li")

jQuery设置样式

  • 例子

    1
    2
    $('div').css('属性','值')
    $('div').css('background','pink')

隐式迭代

  • 遍历内部的DOM元素的过程叫做隐式迭代

jQuery筛选选择器

  • 例子

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

  • 注意 其中的:first是获取第一个xx元素 而不是yy元素下面第一个xx元素

jQuery筛选方法

  • 例子

    | 语法 | 用法 | 说明 |
    | ————————— | ——————————————————————————— | ————————————————————————- |
    | parent() | $(“li”).parent() | 查找父级 |
    | children(selector) | $(“ul”).children(“li”) |相当于$(“ul>li”)最近一级亲儿子 | |
    | find(selector) | $(“ul”).find(“li”) |相当于$(“ul li”) 后代选择器 | |
    | siblings(selector) | $(“.first”).siblings(“li”) | 查找兄弟节点不包括自己本身 |
    | nextAll([expr]) | $(“.first”).nextAll() | 查找当前元素之后的所有同辈元素 |
    | prevAll([expr]) | $(“.last”).prevAll() | 查找当前元素之前的所有同辈元素 |
    | hasClass(class) | $(“div”).hasClass(“protected”) | 检查当前元素是否有某个特定的类名 如果有则返回true |
    | eq(index) | $(“li”).eq(2) | 相当于$(“li:eq(2)”) index从0开始 | |

jQuery排他思想

  • 通过隐式迭代的方式省去循环遍历以及循环绑定事件
  • 例子
  • 案例淘宝服饰精品 点击哪个 哪个显示 其余的不显示
  • 代码

链式编程

  • 为了方便写

    1
    2
    3
    4
    5
    // 实现功能:点击其中一个按钮,点中的按钮变色,其他不变
    // 隐式迭代
    // 新增链式编程
    $('button').click(function(){ $(this).css('background','pink').siblings().css('background','');
    })

jQuery修改css样式方法

  • 参数只写属性名字则返回属性值

    1
    console.log($("div").css("color"));
  • 参数的值如果是数字可以不用加引号

  • 参数可以是对象形式 采用中括号的方法 方便设置多组样式 使用的时候属性名和属性值要用引号隔开,且属性名可以不用加引号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    方式一
    $("div").css({width:100,height:100,background:"pink"});
    方式二
    $("div").css({
    width:200,
    height:500,
    backgroundColor:"blue"
    注意如果是复合属性参考原生js采用驼峰命名法,而且此时的属性值记得双引号
    })

设置类样式

  • 方法作用等同于以前的classList ,可以用来操作类样式,注意里面的参数不要加点

    1
    2
    3
    4
    5
    6
    1.添加类
    $(this).addClass("current")
    2.移除类
    $(this).removeClass("current")
    3.切换类
    $(this).toggleClass("current")
  • add和remove都是在原先的基础上追加/删除

动画方法

  • show() hide() toggle()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //1.点击缓慢显示
    $("button").eq(0).click(function(){
    $("div").show(1000);
    })
    //2.点击缓慢隐藏
    $("button").eq(1).click(function(){
    $("div").hide(1000);
    })
    //3.点击缓慢切换
    $("button").eq(2).click(function(){
    $("div").toggle(1000);
    })
  • slideUp() slideDown() slideToggle()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //4.上拉
    $("button").eq(3).click(function(){
    $("div").slideUp(1000);
    })
    //5.下拉
    $("button").eq(4).click(function(){
    $("div").slideDown(1000);
    })
    // 6.切换拉
    $("button").eq(5).click(function(){
    $("div").slideToggle(1000);
    })
  • mouseover鼠标经过 mouseout鼠标离开

  • 事件切换hover(function(){},function(){}) 两个function相当于mouseover和mouseout,如果只写一个函数则鼠标经过和离开都会触发这个函数

  • 淡入淡出效果fadeIn fadeOut fadeToggle

  • 变化到透明度fadeTo 注意写透明度

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $(function(){
    $("button").eq(0).click(function(){
    $("div").fadeIn(1000);
    })
    $("button").eq(1).click(function(){
    $("div").fadeOut(1000);
    })
    $("button").eq(2).click(function(){
    $("div").fadeToggle(1000);
    })
    })
  • 高亮显示案例

    1
    2
    3
    4
    5
    6
    7
    8
    $(function gaoliang() {
    $(".container div").hover(function(){
    $(this).siblings().stop().fadeTo(1000,0.5);
    },function(){
    $(this).siblings().stop().fadeTo(1000,1);

    })
    })

动画停止

  • 动画效果一旦触发就会执行 但如果多次触发就会造成多个动画或者效果排队执行

  • 停止排队的方法stop() 需要写在动画或者效果前面 这样的话相当于停止上一次动画 就不会造成资源上的浪费

    1
    $(this).stop().slideToggle(1000)

animate使用

  • animate({属性名,属性值},时间)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $(function(){
    $("button").click(function(){
    $("div").animate({
    left:500,
    top:500,
    opacity:.4
    },500)
    })
    })

获取元素属性值

  • 获取元素固有属性prop()

    1
    2
    // 获取a的固有属性值
    console.log($("a").prop("href"));
  • 给元素的固有属性赋值prop(“属性名”,”属性值”)

    1
    $("a").prop("title","bbb");
  • 获取元素的自定义属性attr()

    1
    console.log($("div").attr("index"));
  • 给元素的自定义属性赋值(“属性名”,”属性值”)

    1
    $("div").attr("index",4);
  • 数据缓存data()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    假设有
    <span>111</span>
    <div data-index="1">111</div>

    $("span").data("bianliang","aaa");
    console.log($("span").data("bianliang"));
    则打印出aaa
    console.log($("div").data("index"));
    则打印出1

    data()方法可以缓存数据 但dom里面不会显示出来
    data()方法可以直接读取h5的属性 并且参数不用写成data- 读出来的变量也是数字型
  • 案例全选按钮

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    点击全选按钮 其他三个按钮的状态随之变化
    <input type="checkbox" name="" id="" class="selectAll">全选
    <input type="checkbox" name="" id="" class="j-check">商品1
    <input type="checkbox" name="" id="" class="j-check">商品2
    <input type="checkbox" name="" id="" class="j-check" >商品3
    <input type="checkbox" name="" id="" class="selectAll">全选
    $(function(){
    要想获取checked属性 必须伴随着按钮状态的变化
    $(".selectAll").change(function(){
    利用并集选择器将其他的selectAll也给绑定上
    $("j-checked, .selectAll").prop("checked",$(this).prop("checked"));
    })
    情况2 如果此时除了全选框之外的复选框都被勾上,全选框也应该变化成为勾上
    找出页面中所有选择框的数量
    var jchecknum = $(".j-check").length;
    $(".j-check").change(function(){
    if($(".j-check:checked").length == jchecknum){
    $(".selectAll").prop("checked",true);
    }else{
    $(".selectAll").prop("checked",false);
    }
    })
    })

修改元素文本内容

  • 获取设置元素内容html()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    获取设置元素内容html()
    html()方法是直接修改里面的元素内容并且覆盖原先的
    console.log($("div").html());
    $("div").html("leb猪啊");
    $("div").html("<span>aaa</span>");
    $("div").html("<span>aaa</span>");
    覆盖了 只会输出一个

    console.log($("div").html());
  • 获取设置元素文本内容text()

    1
    2
    3
    4
    console.log($("div").text());
    $("div").text("bbb");
    $("div").text("<p>aa</p>");//无法添加标签 只能对文本进行改变

  • 获取设置表单值val()

    1
    2
    console.log($("input").val());
    $("input").val("leb dsb");
  • 案例增减商品数量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <div>
    <button class="jianhao">-</button>
    <input type="text" class="count" value="1">
    <button class="jiahao">+</button>
    </div>
    <div>
    <button class="jianhao">-</button>
    <input type="text" class="count" value="1">
    <button class="jiahao">+</but>
    </div>

    <script>
    // 要点 只增加本商品的数量,就是点击加号之后兄弟文本框count的值
    $(function(){
    $(".jiahao").click(function(){
    var countnum = $(this).siblings(".count").val();
    console.log(countnum);
    countnum++;
    $(this).siblings(".count").val(countnum);
    })
    $(".jianhao").click(function(){
    var countnum = $(this).siblings(".count").val();
    countnum--;
    if(countnum<1){
    countnum=1;
    }
    $(this).siblings(".count").val(countnum);
    })
    })

    </script>
  • 案例修改商品小计

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <div>
    <ul class="singalprice">
    <li>单价:</li>
    <li>2.13</li>
    </ul>
    <button class="jianhao">-</button>
    <input type="text" class="count" value="1">
    <button class="jiahao">+</button>
    <ul class="totalprice">
    <li>总价:</li>
    <li>2.13</li>
    </ul>
    </div>
    <div>
    <ul class="singalprice">
    <li>单价:</li>
    <li>22.1</li>
    </ul>
    <button class="jianhao">-</button>
    <input type="text" class="count" value="1">
    <button class="jiahao">+</button>
    <ul class="totalprice">
    <li>总价:</li>
    <li>22.1</li>
    </ul>
    </div>

    <script>
    // 要点 只增加本商品的数量,就是点击加号之后兄弟文本框count的值
    $(function(){
    $(".jiahao").click(function(){
    var countnum = $(this).siblings(".count").val();
    var sprice = $(this).siblings(".singalprice").find("li").eq(1).text();
    countnum++;
    sprice *= countnum;
    console.log(sprice);
    $(this).siblings(".count").val(countnum);
    $(this).siblings(".totalprice").find("li").eq(1).text(sprice);

    })
    $(".jianhao").click(function(){
    var countnum = $(this).siblings(".count").val();
    var sprice = $(this).siblings(".singalprice").find("li").eq(1).text();
    countnum--;
    if(countnum<1){
    countnum=1;
    }
    sprice *= countnum;
    $(this).siblings(".count").val(countnum);
    $(this).siblings(".totalprice").find("li").eq(1).text(sprice);
    })
    })

    </script>

祖先选择器

  • $(“xxx”).parents(“.zuxian”) 返回指定祖先

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <div class="one">
    <div class="two">
    <div class="three">
    <div class="four">

    </div>
    </div>
    </div>
    </div>
    <script>
    console.log($(".four").parents(".one"));
    </script>

保留小数

  • toFix(位数)

    1
    2
    33.336.toFixed(2);
    answer = 33.34

遍历元素

  • each(index,dom)

    1
    2
    3
    4
    5
    6
    $(function(){
    var arr = ["red","green","blue"];
    $("div").each(function(i,dom){
    $(dom).css("color",arr[i]);
    })
    })
  • each()遍历数组,遍历对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //  each遍历数组
    $.each(arr,function(i,ele){
    console.log(i);
    console.log(ele);
    })
    // each遍历对象
    $.each({
    name:"leb",
    sex:"female",
    hobbies:"balabababababa"
    },function(i,ele){
    console.log(i+":"+ele);
    })

添加和删除元素

  • 添加元素 两种方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    在节点内部添加
    var li = $(<li>aa</li>);
    在节点内部的前面添加
    $("ul").prepend(li);
    在节点内部的后面添加
    $("ul").append(li);

    在节点外部添加
    var div = $("<div>我是div</div>");
    在节点外部的前面添加
    $("ul").before(div);
    在节点外部的后面添加
    $("ul").after(div);

  • 删除元素的三种方法

    1
    2
    3
    remove() 自杀法
    empty() 杀掉除了自己之外的
    html("") 同上

获取元素大小i

  • width() 和 height()

    1
    2
    可以直接获取
    也可以在里面输入数字设置 不用带单位
  • innerWidth() innerHeight() 获取除自身之外的padding

  • outerWidth() outerHeight() 获取除了自身之外的border

  • outerWidth(true) outerHeight(true) 获取除自身之外的 padding margin border

  • 参数为空返回数字型 参数为数字修改相应值

元素位置

  • offset() 获取设置距离文档的位置

    1
    2
    console.log($(".son").offset());
    console.log($(".son").offset().top);
  • 设置偏移量

    1
    2
    3
    4
    $(".son").offset({
    top:200,
    left:200
    });
  • 获取距离带有定位父级位置的偏移 position 如果没有定位则以文档为准,且该方法只能获取 不能改变

    1
    console.log($(".son").position());

被卷去的头部

  • 页面滚动事件

    1
    2
    3
    $(window).scroll(function(){

    })
  • 被卷去的头部与被卷去的左侧

    1
    2
    3
    scrollTop();
    scrollLeft();
    可以直接设置数字 那么在页面打开的时候就会直接滑动到指定的位置
  • 设置一个小功能 当页面移动到某个位置时候显示返回顶部的盒子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $(function(){
    var boxTop = $(".container").offset().top;
    $(window).scroll(function(){
    console.log($(document).scrollTop());
    if($(document).scrollTop()>=boxTop){
    //此时container已经在最顶部
    $(".back").fadeIn();
    }else{
    $(".back").fadeOut();
    }
    })
    })
  • 注意 window是整个滚动事件的对象 而scrollTop的对象是document

  • 再做个点击返回顶部的功能

    1
    2
    3
    $(".back").click(function(){
    // $(document).scrollTop(0);
    //这样可以实现回到顶部的功能但是没有动画效果
  • 于是想到使用animate做动画 但animate是针对==元素==进行操作的方法,所以对象不是document而是body和html

    1
    2
    3
    $("body,html").stop().animate({
    scrollTop:0
    })

on绑定事件

  • 利用on绑定多个事件 其输入格式为

    1
    2
    3
    4
    $(".example").on({
    mouseenter:function(){ $(this).css("background","blue");
    }
    })
  • 相反的触发方式执行同一函数的方法

    1
    2
    3
    4
    $(".example").on("mouseenter mouseleave",function(){
    xxx
    })
    注意两个事件之间加空格

on事件委派

  • on还可以实现事件委派:给父元素绑定一个事件,在操作其某个子元素时生效 且this指代的是委托的子元素

    1
    2
    3
    4
    5
    6
    语法格式是$("父元素").on("事件类型","子元素",function(){
    xxx;
    })
    $("ul").on("click","li",function(){
    alert(111);
    })
  • 与此同时 on委派的事件还可以对动态生成的元素进行操作

off解绑事件

  • 解除某个元素上面的触发事件

    1
    $("元素").off("click")
  • 解除事件委托

    1
    2
    3
    4
    $("ul").on("click","li",function(){
    alert("xxx");
    })
    $("ul").off("click","li");

one只触发一次事件

  • 和on差不多 但只触发一次

    1
    2
    3
    $("li").one("click",function(){
    alert("xxxxxxx");
    })

自动触发事件trigger

  • 自动触发事件的前提是事件有绑定

  • 方式一 元素.事件 会触发元素的默认行为

    1
    $("div").click()
  • 方式二 元素.trigger(“触发事件”) 会触发元素的默认行为

    1
    $("div").trigger("click");
  • 方式三 元素.triggerHandler(“触发事件”) 不会触发元素的默认行为

    1
    $("div").triggerHandler("click")

事件对象

  • 事件触发就会有事件对象

    1
    2
    3
    4
    $("div").on("click",function(event){
    console.log(event);

    })
  • 阻止事件冒泡 stopPropagation()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document).on("click",function(){
    cl("点击了xxx");
    })
    $("div").on("click",function(event){
    cl("点击了div");
    event.stopPropagation();
    })
    此时只会cl “点击了div”
    而不会cl 点击了xxx
    因为阻止了事件冒泡

对象拷贝

  • 浅拷贝 $.extend(“目标对象”,”拷贝对象”)

    1
    2
    3
    4
    5
    6
    7
    8
    var obj1 = {
    id:0
    };
    var obj2 = {
    id:1,
    name:"andy"
    };
    $.extend(obj1,obj2);
  • 浅拷贝会将原来对象里面的复杂数据类型地址拷贝给目标对象

  • 所以如果修改了目标对象的属性 原来对象中的属性也会随之修改

  • 深拷贝$.extend(true,”目标对象”,”拷贝对象”)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var obj1 = {
    id:0,
    msg: {
    sex:"男"
    }
    };
    var obj2 = {
    id:1,
    name:"andy",
    msg: {
    age: 18
    }
    };
    $.extend(true,obj1,obj2);
    obj1.msg.age = 20;
    console.log(obj2);
    console.log(obj1);
  • 深拷贝会将原来对象的属性完全拷贝一份给目标对象

  • 但如果目标对象中有不冲突的属性 则会合并该属性

多库共存

  • 因为$符号有时候会导致冲突 所以jquery提供一种方法

    1
    2
    3
    4
    5
    将所有的$符号替换成 jQuery
    eg
    jQuery(function(){

    })
  • 第二种方法 jquery释放对$的控制权 让用户自己决定

    1
    var xx = $.noConflict();

jQuery插件

  • ex