jQuery笔记

  • jQuery笔记已关闭评论
  • 135 次浏览
  • A+
所属分类:Web前端
摘要

jQuery是一个实用的JavaScript函数库,jQuery极大地简化了JS对DOM的操作,封装并实现的一系列常用的方法。


jQuery

什么是jQuery?

jQuery是一个实用的JavaScript函数库,jQuery极大地简化了JS对DOM的操作,封装并实现的一系列常用的方法。

jQuery库封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

其实除了jQuery,还有许许多多的开源好用的JavaScript库,只不过jQuery较为流行,使用广泛所以要着重了解和学习

jQuery能够做什么?

快速获取文档元素

jQuery的选择机制构建于Css的选择器,它提供了快速查询DOM文档中元素的能力,而且大大强化了JavaScript中获取页面元素的方式。

提供漂亮的页面动态效果

jQuery中内置了一系列的动画效果,可以开发出非常漂亮的网页,许多网站都使用jQuery的内置的效果,比如淡入淡出、元素移除等动态特效。

创建AJAX无刷新网页

AJAX是异步的JavaScript和XML的简称,可以开发出非常灵敏无刷新的网页,特别是开发服务器端网页时,比如PHP网站,需要往返地与服务器通信,如果不使用AJAX,每次数据更新不得不重新刷新网页,而使用AJAX特效后,可以对页面进行局部刷新,提供动态的效果。

提供对JavaScript语言的增强

jQuery提供了对基本JavaScript结构的增强,比如元素迭代和数组处理等操作。

增强的事件处理

jQuery提供了各种页面事件,它可以避免程序员在HTML中添加太多事件处理代码,最重要的是,它的事件处理器消除了各种浏览器兼容性问题。

更改网页内容

jQuery可以修改网页中的内容,比如更改网页的文本、插入或者翻转网页图像,jQuery简化了原本使用JavaScript代码需要处理的方式。

jQuery如何使用?

上文提到jQuery是一个实用的JavaScript函数库,那么引入jQuery就和引入一个JavaScript文件的方式相同,通常是外部引入

jQuery文件可以从jQuery的官网下载或者其他第三方网站下载到不同的版本,引入到HTML页面后即可使用

jQuery的基本设计和主要用法,就是"选择某个网页元素,然后对其进行某种操作"

jQuery语法

jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作

基础语法: $(selector).action()

jQuery详解

jQuery入口函数

等着DOM结构渲染完毕即可执行内部代码,不必等到所有外部

资源加载完成,jQuery帮我们完成了封装。

  • 第一种方法

    $(document).ready(function(){     ...//此处是页面DOM加载完成的入口 }); 
  • 第二种方法

    $(function(){    ...//此处是页面DOM加载完成的入口 }); 

jQuery的顶级对象

  • $是jQuery的另外一个名称

     $(function(){      alert(111)   })//alert(111)   jQuery(function(){      alert(111)  }) 
  • $是jQuery中的顶级对象(可以把元素包装成我们的jQuery对象)

     $('div').hide(); 

jQuery对象和DOM对象

  • DOM对象:用原生js获取过来的对象就是DOM对象

     var myDiv=document.querySelector('div'); 
  • jQuery对象:用jquery方式获取过来的对象是jQuery对象。本质:通过$符把元素进行了封装

     $('div'); 
  • jQuery对象只能使用jQuery方法,DOM对象则使用原生的JavaScript方法和属性

    两者之间可以相互转换

    • DOM对象转换为jQuery对象

      • 直接获取div,得到的就是jQuery对象

         $('div'); 
      • 已经使用原生的js获取过来DOM

        var myDiv=document.querySelector('div'); $(myDiv); 
    • jQuery对象转换为DOM对象

      $('div')[0].function();  $('div').get(0).function(); 

jQuery选择器

$("选择器") //里面选择器直接写CSS选择器即可,要加引号 
名称 用法 描述
ID选择器 $("#id") 获取指定id的元素
全选选择器 $("*") 匹配所有的元素
类选择器 $(".class") 获取同一类class的元素
标签选择器 $("div") 获取同一标签的所有元素
并集选择器 $("div,p,li") 获取多个元素
交集选择器 $("li,current") 交集元素
子代选择器 $("ul>li") 使用>号,获取亲儿子层级的元素;注意,并不会获取孙子层级的元素
后代选择器 $(“ul li”) 使用空格,选择后代选择器,获取ul下的所有li元素,包括孙子等。

jQuery隐式迭代

隐式迭代就是把匹配的所有元素内部进行遍历循环,给每一个元素添加css这个方法

给匹配到的所有元素进行循环遍历,执行相应的方法,而不是我们再进行循环,简化我们的操作,方便我们调用。

 <head>  <style>         div{             width: 300px;             height: 300px;             background-color: blueviolet;         }     </style> </head>  <body>     <div>1</div>     <div>2</div>     <div>3</div>     <script>       $("div").css("background","pink");     </script> </body> 

jQuery筛选选择器

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

jQuery筛选方法

语法 用法 说明
parent() $("li").parent(); 查找父级,最近一级
parents() $("li").parents("选择器"); 查找指定祖先父级
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") 检查当前的元素是否含有某个特定的类
eq(index) $("li").eq(2) 相当于$("li:eq(2)"),index从0开始
$(".son").parent(); $('.nav').children("p").css("color","red"); $('.nav').find("p").css("color","red");  $(".content div").eq(index).siblings().hide(); $(".content div").eq(index).show(); 

jQuery样式操作

  • 操作css方法

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

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

      $("div").css("width") 
    • 参数是属性名,属性值,逗号分离,是设置一组样式,属性必须加引号,值如果是数字可以不用跟单位和引号

      $("div").css("width","500px") 
    • 参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开,属性可以不用加引号

       $("div").css({         "width":"500",         "height":"1000"       }) 
  • 设置类样式方法

    • 添加类

      $("div").click(function(){    $(this).addClass("current");  }) 
    • 删除类

      $("div").click(function(){   $(this).removeClass("current"); }) 
    • 切换类

       $("div").click(function(){    $(this).toggleClass("current"); }) 
  • 类操作与className操作

    原生JS中className会覆盖元素原先里面的类名。

    jQuery里面类操作只是对指定类进行操作,不影响原先的类名

jQuery效果

  • 显示隐藏

    • show()

      show([speed,[easing],[fn]]) 

      显示参数

      (1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("button").eq(0).click(function(){  $("div").show(1000,function(){       alert(12)    })   }); 
    • hide()

      hide([speed,[easing],[fn]]) 

      隐藏参数

      (1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("button").eq(1).click(function(){                   $("div").hide(1000,function(){                    alert(1)                   })                 }); 
    • toggle()

      toggle([speed,[easing],[fn]]) 

      切换参数

      (1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

       $("button").eq(2).click(function(){                   $("div").toggle(1000,function(){                     alert(1)                   }); 
  • 滑动

    • slideDown()

      slideDown([speed,[easing],[fn]]) 

      (1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("div").slideDown(1000); 
    • slideUp()

      slideUp([speed,[easing],[fn]]) 

      (1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("div").slideUp(1000); 
    • slideToggle()

      slideToggle([speed,[easing],[fn]]) 

      1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

       $("div").slideToggle(1000); 
    • 事件切换(就是鼠标经过和离开的复合写法)

      hover([over],out) 

      (1)over:鼠标移到元素上要触发的函数(相当于mouseenter)

      (2)out:鼠标移出元素要触发的函数(相当于mouseleave)

       $("button").eq(2).hover(function(){                   $("div").slideUp(1000);                 },function(){                   $("div").slideDown(1000);                 }); //相当于  $("button").eq(2).hover(function(){                  $("div").slideToggle(1000);          }); 
  • 动画队列及其停止排队方法

    • 动画或效果队列

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

    • 停止排队

      stop() 

      (1)stop()方法用于停止动画或效果

      (2)注意:stop()写到动画或者效果前面,相当于停止结束上一次的动画

      $("div").stop().slideToggle(1000);  
  • 淡入淡出

    • fadeIn()

      fadeIn([speed,[easing],[fn]]) 

      1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("div").stop().fadeIn(1000); 
    • fadeOut()

      fadeOut([speed,[easing],[fn]]) 

      1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("div").stop().fadeOut(1000); 
    • fadeToggle()

      fadeToggle([speed,[easing],[fn]]) 

      1)参数可以省略,无动画直接显示

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      $("div").stop().fadeToggle(1000); 
    • fadeTo()

      fadeTo([[speed],opacity,[easing],[fn]]) 

      (1)opacity透明度必须写,取值0-1之间

      (2)speed:三种预定速度之一的字符串(“show”,“normal”,or “fast”)或表示动画时长的毫秒数值(如:1000)。必须写

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”。

      $("div").stop().fadeTo(1000,0.5); 
  • 自定义动画

    • animate()

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

      参数

      (1)params:想要更改的样式属性,以对像形式传递,必须写。属性名可以不带引号,如果是复合属性采用驼峰命名法borderLeft。其余参数都可以省略

      (2)speed:三种预定速度之一的字符串("slow","normal",or"fast")或表示动画时长的毫秒数值

      (3)easing:(Optional)用来指定切换效果,默认是“swing”,可用参数“linear”

      (4)fn:回调函数,在动画完成时执行的函数,每个元素执行一次

      //手风琴效果 $(function(){   $(".king li").mouseenter(function(){   $(this).stop().animate({   width:200 }).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();   $(this).siblings("li").stop().animate({   width:100 }).find(".small").stop().fadeIn().siblings(".big").stop().fadeOut();  })  }) 

jQuery属性操作

  • 设置或获取元素固有属性值

    元素固有属性就是元素自带的属性,比如a元素里面的href,比如input元素里面的type

    • 获取属性方法

      prop("属性") 
    • 设置属性语法

      prop("属性","属性值") 
      $("input").prop("checked") $("a").prop("title","wwww"); 
  • 元素的自定义属性

    用户自己给元素添加的属性,我们称之为自定义属性。比如给div添加index=“1”

    • 获取属性语法

      attr("属性") //类似原生getAttribute() 
    • 设置属性语法

      attr("属性","属性值") //类似原生setAttribute() 

      该方法也可以获取H5自定义属性

      $("div").attr("index") $("div").attr("index","34") 
  • 数据缓存data()

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

    • 附加数据语法

      data("name","value") //向被选元素附加数据 
    • 获取数据语法

      data("name") //向被选元素获取数据 

      同时,还可以读取HTML5自定义属性data-index,得到的是数字型

       $("span").data("uname","andy");  $("span").data("uname") 

jQuery内容文本值

  • 普通元素内容html()(相当于原生innerHTML)

    html() //获取元素内容 html("内容") //设置元素内容 $("div").html();//获取元素内容 $("div").html("123");//设置元素内容 
  • 普通元素文本内容text()(相当于原生innerText)

    text()  //获取元素内容 text("内容") //设置元素内容 $("div").text(); //获取元素内容 $("div").text("123"); //设置元素内容 
  • 设置表单值 val()

    val() //获取表单值 val("内容") //设置表单内容 $("input").val(); //获取表单值 $("input").val("123"); //设置表单内容 

    tofixed(index)(保留几位小数方法)

    (p*n).toFixed(2)//保留两位小数 

jQuery尺寸、位置操作

  1. jQuery尺寸

    语法 用法
    width()/height() 取得匹配元素宽度和高度值 只算width/height
    innerWidth()/innerHeight() 取得匹配元素宽度和高度值 包含padding
    outerWidth()/outerHeight() 取得匹配元素宽度和高度值 包含padding、border
    outerWidth(true)/outerHeight(true) 取得匹配元素宽度和高度值包含padding、borde、margin
      div{      width: 200px;      height: 200px;      background-color: aqua;      padding: 10px;      border: 15px solid red;      margin: 20px;    }  	  $("div").width(500) 	  console.log($("div").width()); //500       console.log($("div").innerWidth());//520       console.log($("div").outerWidth());//550       console.log($("div").outerWidth(true));//590 
    • 以上参数为空,则是获取相应值,返回的是数字型
    • 如果参数为数字,则是修改相应值。
    • 参数可以不必写单位
  2. jQuery位置

    位置主要有三个:offset()、position、scrollTop()/scrollLeft()

    • offset()

      offset()设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系

      该方法有2个属性left、top。offset().top用于获取距离文档顶部的距离,offset().left用于获取距离文档左侧的距离。

      可以设置元素的偏移:offset({top:10,left:30})

    • position()

      position方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为准。

    • scrollTop()/scrollLeft()

      scrollTop()方法设置或返回被选元素被卷去的头部或左侧。

jQuery元素操作

  • 遍历元素

    JQuery隐式迭代对同一类元素做出了同样的操作。如果想要给同一类元素做不同操作,就需要用到遍历

    语法1

    $("div").each(function(index,domEle){xxx;}) 
    • each()方法遍历匹配的每一个元素。主要用DOM处理。each每一个

    • 里面的回调函数有2个参数:index是每个元素的索引号,demEle是每个DOM元素对象,不是jQuery对象

    • 想用jQuery方法,需要给这个dom元素转换为jquery对象

      var arr=["red","blue","pink"]  $(function(){  $("div").each(function(index,domEle){  $(domEle).css("color",arr[index])  }) }) 

      语法2

      $.each(object,function(index,element){xxx;}) 
      • $each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
      • 里面的函数有两个参数:index是每个元素的索引号,element遍历内容
  • 创建元素

    $("<li></li>") $("<li>我是后来创建的li</li>") 

    动态的创建了一个

  • 添加元素

    • 内部添加

      element.append("内容") $("ul").append(li)//放到内容的最后面 $("ul").prepend(li)//放到内容的最前面 

      把内容放入匹配元素内部的后面,类似于原生appendChild

    • 外部添加

      element.after("内容") //把内容放入目标元素后面 $(".test").after(div) //把内容放入目标元素后面  element.before("内容") //把内容放入目标元素前面 $(".test").before(div) //把内容放入目标元素前面 
  • 删除元素

    element.remove() //删除匹配的元素(本身)  $("ul").remove() element.empty() //可以删除匹配的元素里面的子节点 孩子  $("ul").empty(); element.html() //可以删除匹配元素里面的子节点 孩子 $("ul").html();  $(".p-action a").click(function(){    $(this).parents(".cart").remove();  }) 

jQuery事件

  • 事件注册

    • 单个事件注册

      element.事件(function(){}) $("div").click(function(){事件处理程序}) 

      其他事件和原生基本一致

      比如,mouseover、mouseout、blur、focus等

  • 事件处理

    on()绑定事件

    • on()方法在匹配元素上绑定一个或多个事件的事件处理函数
    element.on(events,[selector],fn) 

    1.events:一个或多个用空格分隔的事件类型,如"click"或“keydown”、

    2.selector:元素的子元素选择器

    3.fn:回调函数 即绑定在元素身上的侦听函数

      //事件处理不同的 $("div").on({    click:function(){    $("div").css("background","black")    },    mouseover:function(){    $("div").css("background","pink")     }  }) //事件处理相同的 $("div").on("mouseover mouseout",function(){  	$(this).toggleClass("togg");   }) 
    • on()方法还可以进行委派操作,事件委派的操作的定义是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素
    $('ul').on('click','li',function(){     alert('hello world!'); }) 
    • 动态创建的元素,click()没有办法绑定事件,on()可以给动态生成的元素绑定事件

       $("ul").on("click","li",function(){     alert(11)  })  var li=$("<li>我是后来的</li>")  $("ul").append(li); 

      如果有的事件只想触发一次,可以使用one()来绑定事件

      $('ul').one('click','li',function(){     alert('hello world!'); }) 

      自动触发事件

      有些事件希望自动触发,比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发

      • 第一种
      $("div").click();//第一种简写形式 元素.事件() 会触发元素的默认行为 
      • 第二种
      $("div").trigger("click");//第二种自动触发方式 会触发元素的默认行为 
      • 第三种
       $("div").triggerHandler("click");//第三种自动触发方式  不会触发元素的默认行为 

      事件处理解绑

      • 事件解绑off()

        $("div").off() //解除了div身上的所有事件 $("div").off("click"); //解除了div身上的点击事件 $("ul").off("click","li") //解除事件委托 
  • 事件对象

    事件被触发,就会有事件对象的产生

    element.on(events,[selector],function(event){}) 

    阻止默认行为:event.preventDefault()或者return false

    阻止冒泡:event.stopPropagation()

jQuery拷贝对象

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

语法:

$.extend([deep],target,object1,[objectN]) 
  1. deep:如果设true为深拷贝,默认为false浅拷贝

  2. target:要拷贝的对象

  3. object1:待拷贝到第一个对象的对象

  4. objectN:待拷贝到第N个对象的对象

  5. 浅拷贝是把被拷贝的对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象

    jQuery笔记

  6. 深拷贝,前面加true,完全克隆(拷贝的对象,而不是地址),修改目标对象不会影响被拷贝对象。

    jQuery笔记

var targetObj={        id:1 }; 	var obj={         id:1, 	    name:"andy"      };   $.extend(targetObj,obj);//浅拷贝   $.extend(true,targetObj,obj);//深拷贝 

jQuery多库共存

jQuery使用$作为表示符,随着jQuery的流行,其他js库也会用这$作为标识符,这样一起使用会引起冲突

需要一个解决方案,让jQuery和其他的js库不存在冲突,可以同时存在,这就叫多库共存

解决方案:

  1. 把里面的$符号统一改为jQuery。比如jQuery("div")

  2. jQuery变量规定新的名称:$noConflict() var xx=$.noConflict()

     <div></div>               <script>                 $(function(){                function $(ele){                  return document.querySelector(ele);                }                console.log(div);//error                jQuery.each();//right                var suibian=jQuery.noConflict();                console.log(suibian("span"));//right                 })               </script> 

jQuery插件

jQuery功能比较有限,想要更复杂的特效效果,可以借助jQuery插件完成

  1. jQuery插件库 https://www.jq22.com/
  2. jQuery之家 http://www.htmleaf.com/

jQuery插件使用步骤

  1. 引入相关文件。(jQuery文件和插件文件)
  2. 复制相关html、css、js(调用插件)

常用插件:

  • 瀑布流

  • 图片懒加载(图片使用延迟加载在可提高网页下载速度。也能帮助减轻服务器负载,当我们页面滑动到可视区域,再显示图片)

  • 全屏滚动

    中文翻译网站:http://www.dowebok.com/demo/2014/77/

Bootstrap JS 插件:

bootstrap框架也是依赖于jQuery开发的,因此里面的js插件使用,也必须引入jQuery文件