jQuery

一、jQuery介绍

为什么要用jQuery?在用js写代码时,会遇到一些问题:

  window.onload 事件有事件覆盖的问题,因此只能写一个事件。

  代码容错性差

  浏览器兼容性问题

  书写很繁琐,代码量多

  代码很乱,各个页面到处都是

  动画效果很难实现

什么是jQuery

jQuery是js的一个库,封装了我们开发过程中常用的功能,方便调用,提高开发效率。

初期,主要学习如何使用jQuery操作DOM,其实是学习jQuery封装好的那些API

这些API的共同特点是:几乎都是方法。所以在使用jQuery的API时,都是方法调用,也就是说要加小括号(),小括号里面是相应的参数,参数不同,功能不同

 1 jQuery的使用:
 2 
 3 1、先引入jQuery
 4 <script type="text/javascript" src="jquery.min.js"></script>
 5 #这里说下windows下如何安装jQuery,下载node-v8.11.3-x64.msi安装包,然后指定目录安装,目录: npm install jquery --save
 6 
 7 2、jQuery入口函数(有2种方式):
 8 方式1:
 9 $(document).ready(function(){
10    //执行代码 
11 })
12 
13 方式2:
14 $(function(){
15     //执行代码
16 })
17 
18 3、js和jQuery之间的转换
19 js转换成jQuery的方式,$(js对象)
20 jQuery转换成js的方式,$('.box')[index]
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style type="text/css">
 7         .box{
 8             width: 100px;
 9             height: 100px;
10             background-color: green;
11         }
12     </style>
13     
14 </head>
15 <body>
16     <div class="box">
17     </div>
18     <div class="box">
19     </div>
20     <!-- 先引包 -->
21     <script type="text/javascript" src="jquery.min.js"></script>
22     <script type="text/javascript">
23 
24     $(function(){
25 
26             console.log($('.box'));
27 
28             $('.box').click(function(){
29 
30             $(this).css({
31                     'background-color':'yellow',
32                     'width':'300px'
33                 })
34             })
35         });
36         
37 
38 
39     </script>
40 
41 
42 </body>
43 </html>
jQuery例子

jQuery对象

jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里的方法:例如$(“#i1”).html()。

$("#i1").html()的意思是:获取id值为 i1的元素的html代码。其中 html()是jQuery里的方法。

我们在声明一个jQuery对象变量的时候在变量名前面加上$:

var $variable = jQuery对象

var variable = DOM对象

$variable[0]    // jQuery对象转成DOM对象

jQuery对象和DOM对象的使用:

$("#i1").html();    //jQuery对象可以使用jQuery方法
$("#i1")[0].innerHTML;  // DOM对象使用DOM方法

 

jQuery入口函数与js入口函数的区别

区别一:书写个数不同;
    js的入口函数只能出现一次,出现多次会存在事件覆盖的问题
    jQuery的入口函数,可以出现多次,不存在事件覆盖问题

区别二:执行时机不同
    js的入口函数是在所有的文件资源加载完成后,才执行。这些文件资源包括:页面文档、外部的js文件、外部的css文件、图片等
    jQuery的入口函数,是在文档加载完成后,就执行。文档加载完成指的是:DOM树加载完成后,就可以操作DOM了,不用等到所有的外部资源都加载完成

文档加载顺序:从上往下,边解析边执行
jQuery使用$符号原因:书写简洁、容易记住

$ 代表的就是jQuery

如何理解jQuery里面的$符号呢?
$实际上表示的是一个函数名,如下:
$();    //调用上面我们自定义的函数$
$(document).ready(function(){});    //调用入口函数
$(function(){});        //调用入口函数
$("#btnShow")        //获取id属性为btnShow的元素
$("div")                //获取所有的div标签元素

 二、jQuery选择器

1、jQuery的基本选择器

2、层级选择器

3、基本过滤选择器

4、筛选选择器

 三、jQuery动画效果

显示动画

方式一:
$('div').show();
解释:无参数,表示让指定的元素直接显示出来

方式二:
$('div').show(3000);
解释:通过控制元素的宽高、display属性,逐渐显示,2秒后显示完毕

方式三:
$("div").show("slow");
参数可以是:
    slow 慢:600ms
    normal 正常:400ms
    fast 快:200ms

方式四:
$('div').show(5000,function(){
    alert('动画执行完毕!');
});
解释:动画执行完后,立即执行回调函数

隐藏动画

$(selector).hide();

$(selector).hide(1000); 

$(selector).hide("slow");

$(selector).hide(1000, function(){});

 开关式显示隐藏动画

$('#box').toggle(3000,function(){});

显示和隐藏的来回切换采用的是toggle()方法:就是先执行show(),再执行hide()

滑入滑出

1、滑入动画效果(类似生活中的卷帘门)
$(selector).slideDown(speed,回调函数);
解释:下拉动画,显示元素

2、滑出动画效果
$(selector).slideUp(speed,回调函数);
解释:上拉动画,隐藏元素

3、滑入滑出切换效果:
$(selector).slideToggle(speed,回调函数);

淡入淡出

1、淡入动画效果
$(selector).fadeIn(speed,callback);
作用:让元素以淡淡的进入视线的方式展示出来

2、淡出动画效果
$(selector).fadeOut(1000);
作用:让元素以渐渐消失的方式隐藏起来

3、淡入淡出切换效果
$(selector).fadeToggle('fast',callback);
作用:通过改变透明度,切换匹配元素的显示或隐藏状态

自定义动画

语法:
$(selector).animate({params} , speed , callback);
作用:执行一组CSS属性的自定义动画
    第一个参数:要执行动画的CSS属性
    第二个参数:执行动画时长
    第三个参数:动画执行完成,立即执行的回调函数
 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <style>
 7         div {
 8             position: absolute;
 9             left: 20px;
10             top: 30px;
11             width: 100px;
12             height: 100px;
13             background-color: green;
14         }
15     </style>
16     <script src="jquery.min.js"></script>
17     <script>
18         
19         $(function(){
20             $('button').click(function(){
21 
22                 var json = {'width':500,'height':500,'left':300,'top':300,'border-radius':100};
23                 var json2 = {'width':100,'height':100,'left':100,'top':100,'border-radius':100,'background-color':'red'};
24 
25                 //自定义动画
26                 $('div').animate(json,1000,function(){
27                     $('div').animate(json2,1000,function(){
28                         alert('动画执行完毕')
29                     })
30                 })
31             })
32         });
33 
34 
35     </script>
36 </head>
37 <body>
38 
39 <button>自定义动画</button>
40 <div></div>
41 </body>
42 </html>
自定义动画代码

停止动画

$(selector).stop(ture,false);

参数如果都不写,模式都是false,实际情况直接写stop()
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title></title>
 6     <style type="text/css">
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         ul{
12             list-style: none;
13         }
14         .wrap{
15             width: 330px;
16             height: 30px;
17             margin: 100px auto;
18             padding-left: 10px;
19             background-color: pink;
20         }
21         .wrap li{
22             background-color: green;
23         }
24         .wrap>ul>li{
25             float: left;
26             margin-right: 10px;
27             position: relative;
28         }
29         .wrap a{
30             text-decoration: none;
31             display: block;
32             height: 30px;
33             width: 100px;
34             color: #000;
35             line-height: 30px;
36             text-align: center;
37         }
38         .wrap li ul{
39             position: absolute;
40             top: 30px;
41             display: none;
42         }
43     </style>
44 </head>
45 <body>
46 
47     <div class="wrap">
48         <ul>
49             <li>
50                 <a href="javascript:;">一级菜单</a>
51                 <ul>
52                     <li><a href="javascript:;">二级菜单2</a></li>
53                     <li><a href="javascript:;">二级菜单3</a></li>
54                     <li><a href="javascript:;">二级菜单4</a></li>
55                 </ul>
56             </li>
57             <li>
58                 <a href="javascript:;">一级菜单2</a>
59                 <ul>
60                     <li><a href="javascript:;">二级菜单2</a></li>
61                     <li><a href="javascript:;">二级菜单3</a></li>
62                     <li><a href="javascript:;">二级菜单4</a></li>
63                 </ul>
64             </li>
65             <li>
66                 <a href="javascript:;">一级菜单3</a>
67                 <ul>
68                     <li><a href="javascript:;">二级菜单2</a></li>
69                     <li><a href="javascript:;">二级菜单3</a></li>
70                     <li><a href="javascript:;">二级菜单4</a></li>
71                 </ul>
72             </li>
73         </ul>
74     </div>
75 
76 </body>
77 
78 <script type="text/javascript" src="jquery.min.js"></script>
79 <script type="text/javascript">
80     
81     $(function(){
82 
83         $('.wrap>ul>li').mouseover(function(){
84             $(this).children('ul').stop().slideDown(1000);
85         })
86 
87         $('.wrap>ul>li').mouseleave(function(){
88             $(this).children('ul').stop().slideUp(1000);
89         })
90     });
91 </script>
92 </html>
下拉二级菜单实例

jQuery基础语法

查找标签

基本选择器

id选择器
$("#id")

标签选择器
$("tagName")

class选择器
$(".className")

所有元素选择器
$("*")

组合选择器
$("#id, .className, tagName")

层级选择器

x和y 可以为任意选择器

$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y

基本选择器

:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)

属性选择器

<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签

筛选器方法

下一个元素:

$("#id").next()
$("#id").nextAll()
$("#id").nextUntil("#i2")

上一个元素

$("#id").prev()
$("#id").prevAll()
$("#id").prevUntil("#i2")

父元素

$("#id").parent()
$("#id").parents()  // 查找当前元素的所有的父辈元素
$("#id").parentsUntil() // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。

父子和兄弟元素

$("#id").children;    //儿子们
$("#id").siblings;    //兄弟们

查找

$("div").find("p")
// 等价于 $("div p")

筛选

$("div").filter(".c1")     // 从结果集中过滤出有c1样式类的
// 等价于 $("div.c1")

补充:

.first() // 获取匹配的第一个元素
.last() // 获取匹配的最后一个元素
.not() // 从匹配元素的集合中删除与指定表达式匹配的元素
.has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq() // 索引值等于指定值的元素

操作标签

样式操作

样式类

addClass();           // 添加指定的CSS类名
removeClass;        //移除指定的CSS类名
hasClass();             //判断样式存不存在 
toggleClass();        //切换CSS类名,如果有就移除,没有就添加

CSS

css("color","red")        // DOM操作:tag.style.color = "red"

位置操作

offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置
position()// 获取匹配元素相对父元素的偏移
scrollTop()// 获取匹配元素相对滚动条顶部的偏移
scrollLeft()// 获取匹配元素相对滚动条左侧的偏移       

.offset()方法允许我们检索一个元素相对于文档(document)的当前位置。

和 .position()的差别在于: .position()是相对于相对于父级元素的位移

文本操作

HTML代码

html()        // 取得第一个匹配元素的html内容
html(val)    // 设置所有匹配元素的html内容

文本值

text()        // 取得所有匹配元素的内容
text(val)    // 设置所有匹配元素的内容

val()            //取得第一个匹配元素的当前值
val(val)        // 设置所有匹配元素的值
val([val1,val2])    // 设置多选的checkbox、多选select的值 

属性操作

用于ID等或自定义属性:

attr(attrName)    //返回第一个匹配元素的属性值
attr(attrName,attrValue)    //为所有匹配元素设置一个属性值
attr({k1:v1, k2:v2"})        //位所有匹配元素设置多个属性值
removeAttr()                //从每一个匹配的元素中删除一个属性

用于checkbox和radio

prop()            // 获取属性
removeProp()    // 移除属性

prop和attr的区别

attr全称 attribute(属性)

prop全称 property(属性)

虽然都是属性,但它们所指的属性并不相同,attr所指的属性是HTML标签的属性,而prop指的是DOM对象属性

举例:

<input type="checkbox" id="i1" value="1">

针对上面的代码

$("#i1").attr("checked")    // undefined
$("#i1").prop("checked")    //false

可以看到attr获取一个标签内没有的东西会得到undefined,而prop获取的是这个DOM对象的属性,因此checked为false

如果换成如下代码:

<input type="checkbox" checked id="i1" value="1">
$("#i1").attr("checked")    // checked
$("#i1").prop("checked")    // true

说明attr的作用范围只限于HTML标签内的属性,而prop获取的是这个DOM对象的属性,选中返回true,没选中返回false

自定义属性,attr和prop又有什么区别:

<input type="checkbox" checked id="i1" value="1" me="自定义属性">
$("#i1").attr("me")        // 自定义属性
$("#i1").prop("me")        // undefined

可以看到prop不支持获取标签的自定义属性

总结:

  1、对于标签上有的能看到的属性和自定义属性都用attr

  2、对于返回布尔值的比如checkbox、radio和option的是否被选中用prop

文档处理

添加到指定元素内部的后面

$(A).append(B)        // 把B追加到A
$(A).appendTo(B)      // 把A追加到B

添加到指定元素内部的前面

$(A).prepend(B)// 把B前置到A
$(A).prependTo(B)// 把A前置到B

添加到指定元素外部的后面

$(A).after(B)// 把B放到A的后面
$(A).insertAfter(B)// 把A放到B的后面

添加到指定元素外部的前面

$(A).before(B)// 把B放到A的前面
$(A).insertBefore(B)// 把A放到B的前面

移除和清空元素

remove()// 从DOM中删除所有匹配的元素。
empty()// 删除匹配的元素集合中所有的子节点。

替换

replaceWith()
replaceAll()

克隆

clone()// 参数

克隆示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>克隆</title>
  <style>
    #b1 {
      background-color: deeppink;
      padding: 5px;
      color: white;
      margin: 5px;
    }
    #b2 {
      background-color: dodgerblue;
      padding: 5px;
      color: white;
      margin: 5px;
    }
  </style>
</head>
<body>

<button id="b1">屠龙宝刀,点击就送</button>
<hr>
<button id="b2">屠龙宝刀,点击就送</button>

<script src="jquery-3.2.1.min.js"></script>
<script>
  // clone方法不加参数true,克隆标签但不克隆标签带的事件
  $("#b1").on("click", function () {
    $(this).clone().insertAfter(this);
  });
  // clone方法加参数true,克隆标签并且克隆标签带的事件
  $("#b2").on("click", function () {
    $(this).clone(true).insertAfter(this);
  });
</script>
</body>
</html>
点击复制按钮

事件

常用事件

click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...})
keyup(function(){...})

事件绑定

.on ( events [, selector ], functions() {} )

# events: 事件
# selector:选择器(可选)
# function:事件处理函数

移除事件

.off ( events [, selector ] [, function() {} )

# off() 方法移除用 .on()  绑定的事件处理程序
# events:事件
# selector:选择器(可选)
# function:事件处理函数

阻止后续事件执行

return false;    // 常见阻止表单提交等

e.preventDefault();

 

posted @ 2018-07-18 15:12  叫你你敢答应么  阅读(142)  评论(0)    收藏  举报