16 jQuery阶段_jQuery的基本概念_各种选择器

jQuery 基本概念:

使用js的缺点:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         div{
 8             height: 200px;
 9             margin-bottom: 10px;
10             background-color: cyan;
11             display: none;
12         }
13     </style>
14     <script>
15         window.onload = function () {
16             document.getElementById("btn1").onclick = function () {
17                 var divs = document.getElementsByTagName("div");
18                 for (var i = 0; i < divs.length; i++) {
19                     divs[i].style.display = "block";
20                 }
21             };
22             document.getElementById("btn2").onclick = function () {
23                 var divs = document.getElementsByTagName("div");
24                 for (var i = 0; i < divs.length; i++) {
25                     divs[i].innerText = "我爱学习!";
26                 }
27             };
28         }
29     </script>
30 </head>
31 <body>
32 
33     <input type="button" value="展示" id="btn1">
34     <input type="button" value="显示内容" id="btn2">
35     <div></div>
36     <div></div>
37     <div></div>
38     <script src="js/common.js"></script>
39     <script>
40 
41 
42     </script>
43 </body>
View Code

上述代码的问题:

jQuery初体验:

其实jQuery 就是个js文件。 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         div{
 8             height: 200px;
 9             margin-bottom: 10px;
10             background-color: cyan;
11             display: none;
12         }
13     </style>
14     <script src="js/jquery-1.12.4.js"></script>
15     <script>
16         //jQuery初体验
17         //1,引入jQuery文件
18         //2,jQuery 的入口函数 相当于 之前写的window.onLoad() 函数。
19         /*
20         $().ready(function () {  //$ 是个函数名!jQuery 多是将匿名函数 做参数,而不是直接等于!!!
21             console.log("hahah");
22         });
23          */
24         $(document).ready(function () {
25             //jQuery中注册事件, 使用css方式找id ,而且事件不带 on ,而且不用等号 形式,将匿名函数做参数。
26             $("#btn1").click(function () {
27                 // alert("我是 展示 按钮!");
28                 $("div").show(); //找到三个div 并让它们显示!!!
29             });
30 
31             $("#btn2").click(function () {
32                 $("div").text("我爱学习!!!");  //找到三个div,并显示文本。
33             });
34         });
35         /*jQuery 的优点:
36         * 1,不用写循环: jQuery 中有隐式迭代(帮我们做遍历)。不需要我们自己动手遍历。
37         * 2,不用担心兼容性问题,不用担心注册事件 会被覆盖。
38         * 3,找对象的方法简单,和css选择器基本一致
39         * 4,可以很容易地实现简单的动画效果
40         * */
41     </script>
42 </head>
43 <body>
44     <input type="button" value="展示" id="btn1">
45     <input type="button" value="显示内容" id="btn2">
46     <div></div>
47     <div></div>
48     <div></div>
49 </body>
View Code

jQuery的优点:

1,不用写循环: jQuery 中有隐式迭代(帮我们做遍历)。不需要我们自己动手遍历。
2,不用担心兼容性问题,不用担心注册事件 会被覆盖。
3,找对象的方法简单,和css选择器基本一致
4,可以很容易地实现简单的动画效果

什么是jQuery:

官网:https://jquery.com/   它的官网logo 有句话: write less,do more!

官方网站解释如下:

What is jQuery?

jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers. With a combination of versatility and extensibility, jQuery has changed the way that millions of people write JavaScript.

jQuery是一个快速、轻量级、功能丰富的JavaScript库。它使诸如HTML文档遍历和操作、事件处理、动画和Ajax之类的事情变得更加简单,因为它提供了一个易于使用的API,可以跨多种浏览器工作。jQuery结合了通用性和可扩展性,改变了数百万人编写JavaScript的方式。

其实核心就是一句话:jQuery 就是个js库。 

jQuery就是一个js库,使用jQuery的话,会比使用JavaScript更简单。

什么是js库呢?

js库:把一些常用到的方法写到一个单独的js文件,使用的时候直接去引用这js文件就可以了。(例如:animate.js)

我们知道了,jQuery其实就是一个js文件,里面封装了一大堆的方法方便我们的开发,其实就是一个加强版的common.js,因此我们学习jQuery,其实就是学习jQuery这个js文件中封装的一大堆方法

jQuery 的版本问题:

jQuery版本有很多,分为1.x 2.x 3.x

1.x版本:能够兼容IE678浏览器
2.x版本:不兼容IE678浏览器
1.x和2.x版本jquery都不再更新版本了,现在只更新3.x版本。

3.x版本:不兼容IE678,更加的精简(在国内不流行,因为国内使用jQuery的主要目的就是兼容IE678)。

所以国内只要是使用jQuery,那么肯定使用的是1.x 版本,没办法,不得不兼容IE678.  

关于压缩版  和 未压缩版:

jquery-1.12.4.min.js:压缩版本,适用于生产环境,因为文件比较小,去除了注释、换行、空格等东西,但是基本没有可阅读性。
jquery-1.12.4.js:未压缩版本,适用于学习与开发环境,源码清晰,易阅读。

补:

所以压缩版本应该用在生产环境(文件小)。

开发环境以版都是用易读的,方便我们查看文档。所以注释,空格,换行之类是不能省的。一般不用压缩版。 

两个版本功能是完全一致的,只要在放到生产环境的时候,换成压缩版本即可。 

jQuery 的入口函数:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         div{
 8             height: 200px;
 9             margin-bottom: 10px;
10             background-color: cyan;
11             display: none;
12         }
13     </style>
14     <script src="js/jquery-1.12.4.js"></script>
15     <script>
16         //1,jQuery 入口函数第一种写法  (不推荐,麻烦!) 相当于window.onLoad() 页面加载完之后才执行入口函数!如果script标签放在下面,则不需要使用入口函数。
17         $(document).ready(function () {
18            console.log("这是 jQuery入口函数 的第一种写法");
19         });
20 
21         //2,jQuery 入口函数第二种写法  jQuery 是不会覆盖的。
22         $(function () {
23             console.log("这是 jQuery入口函数的 第二种写法");
24         });
25 
26 
27 
28     </script>
29 </head>
30 <body>
31 
32     <div></div>
33     <div></div>
34     <div></div>
35     <script src="js/jquery-1.12.4.js"></script>
36     <script>
37         $("div").show(1000);  //不需要写入口函数!
38     </script>
39 
40 
41 </body>
jQuery的入口函数 $().ready(function (){});
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <script src="js/jquery-1.12.4.js"></script>
 7     <script>
 8         //回顾 js 的 入口函数
 9         window.onload = function(){
10             console.log("这是js 的入口函数!");
11         };
12 
13         //1,jQuery 入口函数第一种写法  (不推荐,麻烦!) 相当于window.onLoad() 页面加载完之后才执行入口函数!如果script标签放在下面,则不需要使用入口函数。
14         $(document).ready(function () {
15            console.log("这是 jQuery入口函数 的第一种写法");
16         });
17 
18         //2,jQuery 入口函数第二种写法  jQuery 是不会覆盖的。
19         $(function () {
20             console.log("这是 jQuery入口函数的 第二种写法");
21         });
22 
23         //执行之后,会发现 jQuery 入口函数 先于js入口函数执行。为什么?
24         // 1.    JavaScript的入口函数要等到页面中所有资源(包括图片、文件)加载完成才开始执行。
25         // 2.    jQuery的入口函数只会等待文档树加载完成就开始执行,并不会等待图片、文件的加载。
26         
27     </script>
28 </head>
29 <body>
30 
31 
32 
33 </body>
jQuery 的入口函数先于 js的入口函数执行!

jQuery入口函数与js入口函数的对比:

1. JavaScript的入口函数要等到页面中所有资源(包括图片、文件)加载完成才开始执行。
2. jQuery的入口函数只会等待文档树加载完成就开始执行,并不会等待图片、文件的加载。

二者都会等文档加载完成,但jQuery 不会等待图片等资源,而js会等待图片等资源加载完毕!  

所以jQuery 入口函数比较好!

虽然入口函数可以不写,但是推荐写!

使用jQuery 的三个步骤:

1,引用jQuery 文件

2,入口函数

3,功能实现

jQuery对象 与 DOM对象(js对象)的区别(重点):

1. DOM对象(js对象):使用JavaScript中的方法获取页面中的元素返回的对象就是dom对象。
2. jQuery对象:jquery对象就是使用jquery的方法获取页面中的元素返回的对象就是jQuery对象。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <script src="js/jquery-1.12.4.js"></script>
 7     <script>
 8         $(function () {
 9             //1,js对象: 用javascript的方式获得的对象就是 js 对象 (DOM对象)
10             var div = document.getElementById("div1"); //js对象
11             div.style.backgroundColor = "yellow";
12 
13             //2, jQuery 对象:用jQuery 的方式获得的对象就是 jQuery 对象。前面的变量常加上 $ 符
14             var $div = $("#div1");
15             $div.text("我爱中国! Hello World!");
16         });
17 
18     </script>
19 </head>
20 <body>
21     <div id="div1"></div>
22 </body>
什么是 DOM对象(js对象),什么是jQuery对象!

DOM 对象 和 jQuery对象的区别:

1,jQuery对象其实就是DOM对象的包装集(包装了DOM对象的集合(伪数组))
2,DOM对象与jQuery对象的方法不能混用。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <script src="js/jquery-1.12.4.js"></script>
 7     <script>
 8         $(function () {
 9             // 查看 jQuery 对象
10             //$divs 是个伪数组,不能使用数组的方法!
11             var $divs = $("div");
12             console.log($divs);
13             /*
14             jQuery.fn.init(3)
15             0: div
16             1: div
17             2: div
18             context: document
19             length: 3
20             prevObject: jQuery.fn.init [document, context: document]
21             selector: "div"
22             __proto__: Object(0)
23             */
24 
25             //真数组。 可以arr 可以使用.sort()方法,真数组。
26             var arr = [1,2,3,4,5];
27             console.log(arr);
28             /*
29             (5) [1, 2, 3, 4, 5]
30             0: 1
31             1: 2
32             2: 3
33             3: 4
34             4: 5
35             length: 5
36             __proto__: Array(0)
37             * */
38 
39 
40         });
41 
42     </script>
43 </head>
44 <body>
45     <div></div>
46     <div></div>
47     <div></div>
48 </body>
查看jQuery 对象,它其实是个伪数组。

总结:

jQuery 对象  和 DOM 对象不是一个对象; 二者的关系是 jQuery 中放了很多DOM对象。 

类似于数组中放了字符串对象差不多!数组有数组的方法,里面的字符串有字符串自己的方法!

DOM对象 和  jQuery 对象  互相使用对方的方法:

1,DOM对象 想使用jQuery 对象的方法:

通过$() 可以使得DOM对象变为jQuery 对象。 

2,jQuery对象 想使用 DOM 对象的方法:

从jQuery对象 这个伪数组中  取出来  调用方法即可。 

不过取出来的方式有两种:一:通过下标 ;二:通过.get(index);  

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         div{
 8             height: 50px;
 9             margin-bottom: 20px;
10             background-color: cyan;
11         }
12         span{
13             width: 50px;
14             height: 50px;
15         }
16     </style>
17     <script src="js/jquery-1.12.4.js"></script>
18     <script>
19         $(function () {
20             $("#btn").click (function () {
21                 console.log("hahhaha");
22                 var $divs = $("div"); //jQuery 对象
23                 var span = document.getElementsByTagName("span"); //DOM 对象
24 
25                 // 1, DOM 对象 使用 jQuery 对象的方法  //需要先把 DOM对象包装一下,变为jQuery对象!
26                 $(span).text("我是按钮");
27 
28                 // 2,jQuery对象 使用DOM对象的方法  //直接取出来用即可。
29                 $divs[0].style.backgroundColor = "yellow"; //除了用下标,也可以使用.get(index)!
30                 $divs.get(2).style.backgroundColor = "darkred";
31             })
32         });
33 
34     </script>
35 </head>
36 <body>
37     <input type="button" value="点我查看效果" id="btn">
38     <div></div>
39     <div></div>
40     <div></div>
41     <span></span>
42 </body>
View Code

隔行变色案例:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 </head>
 8 <body>
 9     <!--    ul>li{我是第$个li}*10-->
10     <input type="button" value="点我查看效果" id="btn">
11     <ul>
12         <li>我是第1个li</li>
13         <li>我是第2个li</li>
14         <li>我是第3个li</li>
15         <li>我是第4个li</li>
16         <li>我是第5个li</li>
17         <li>我是第6个li</li>
18         <li>我是第7个li</li>
19         <li>我是第8个li</li>
20         <li>我是第9个li</li>
21         <li>我是第10个li</li>
22     </ul>
23     <script src="js/jquery-1.12.4.js"></script>
24     <script>
25 
26         $(function () { //入口函数
27             /*
28             $("#btn").click(function () {
29                 //js 的方式实现
30                 var lis = document.getElementsByTagName("li");
31                 for (var i =0;i<lis.length;i++){
32                     if(i % 2==0 )
33                         lis[i].style.backgroundColor = "red";
34                     else
35                         lis[i].style.backgroundColor = "yellow";
36                 }
37             });
38              */
39 
40 
41             $("#btn").click(function () {
42                 //jQuery 对象方式实现。
43                 var $lis = $("li");
44                 for (var i=0;i<$lis.length;i++){
45                     if(i %2 == 0)
46                         $lis[i].style.backgroundColor = "red";
47                     else
48                         $lis[i].style.backgroundColor = "yellow";
49                 }
50             });
51 
52 
53         });
54 
55 
56 
57 
58 
59 
60     </script>
61 
62 
63 </body>
隔行变色!

$的实质:

第三种用法用的最多!!!

还有:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 
 8 </head>
 9 <body>
10 
11     <script src="js/jquery-1.12.4.js"></script>
12     <script>
13 
14         console.log($ == jQuery);
15         //$ 实际上就是jQuery 的别名。 因为jQuery太长了,所以用 $ 代替
16         //所以,入口函数也可以如下;
17         jQuery(function () {
18             console.log("hahhaa"); 
19         });
20     </script>
21 
22 </body>
实际上$ 就是jQuery 的别名。

选择器:

什么是jQuery选择器:

jQuery选择器是jQuery为我们提供的一组方法,让我们更加方便的获取到页面中的元素。注意:jQuery选择器返回的是jQuery对象

jQuery选择器有很多,基本兼容了CSS1到CSS3所有的选择器,并且jQuery还添加了很多更加复杂的选择器。【查看jQuery文档】

jQuery选择器虽然很多,但是选择器之间可以相互替代,就是说获取一个元素,你会有很多种方法获取到。所以我们平时真正能用到的只是少数的最常用的选择器。

基本的选择器:

名称用法描述
ID选择器 $(“#id”); 获取指定ID的元素
类选择器 $(“.class”); 获取同一类class的元素
标签选择器 $(“div”); 获取同一类标签的所有元素
并集选择器 $(“div,p,li”); 使用逗号分隔,只要符合条件之一就可。
交集选择器 $(“div.redClass”); 获取class为redClass的div元素

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 </head>
 8 <body>
 9     <ul>
10         <li>我是第1个li</li>
11         <li>我是第2个li</li>
12         <li>我是第3个li</li>
13         <li id="four">我是第4个li</li>
14         <li>我是第5个li</li>
15         <li class="green">我是第6个li</li>
16         <li class="green">我是第7个li</li>
17         <li>我是第8个li</li>
18         <li class="pink">我是第9个li</li>
19         <li>我是第10个li</li>
20         <div>哈哈哈哈哈</div>
21         <div>Hello World</div>
22         <span>我是span</span>
23         <a href="">我是 a标签 </a>
24     </ul>
25     <script src="js/jquery-1.12.4.js"></script>
26     <script>
27         //入口函数
28         $(function () {
29             /*基本选择器*/
30             /*
31             * jQuery 对象如何设置样式 ,可以使用css(name,value);函数设置样式
32             * name:样式名
33             * value:样式值
34             * */
35             // 1,id选择器
36             $("#four").css("backgroundColor","red"); //使用id 选择器获取 jQuery 对象 并设置器样式!
37 
38 
39             //2,类选择器
40             $(".green").css("backgroundColor","green"); //使用类 选择器获取 jQuery 对象 并设置器样式!
41 
42             //3,标签选择器
43             $("div").css("backgroundColor","cyan");  //使用 标签  选择器获取 jQuery 对象 并设置器样式!
44 
45             //===========================并集 和 交集=============================
46             //4,并集选择器
47             $("span,a").css("backgroundColor","yellow");  //使用 并集选择器(同时操作多个)  获取 jQuery 对象 并设置器样式!
48 
49             //5,交集选择器
50             $("li.pink").css("backgroundColor","pink");  //使用 交集 选择器  获取 jQuery 对象 并设置器样式!
51 
52 
53 
54         });
55     </script>
56 
57 
58 </body>
基础选择器

总结:

跟css的选择器用法一模一样。

层级选择器:

名称用法描述
子代选择器 $(“ul>li”); 使用>号,获取儿子层级的元素,注意,并不会获取孙子层级的元素
后代选择器 $(“ul li”); 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等

跟CSS的选择器一模一样。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 </head>
 8 <body>
 9     <div>
10         <ul>
11             <li>我是div 的孙子</li>
12             <li>我是div 的孙子</li>
13             <li>我是div 的孙子</li>
14             <span>我也是div 的孙子</span>
15         </ul>
16         <span>我是div 中的span</span>
17         <li>我是div的儿子</li>
18     </div>
19     <script src="js/jquery-1.12.4.js"></script>
20     <script>
21         //入口函数
22         $(function () {
23             /*层级 选择器*/
24             /*
25             * jQuery 对象如何设置样式 ,可以使用css(name,value);函数设置样式
26             * name:样式名
27             * value:样式值
28             * */
29             // 1, 子代选择器 >
30             $("div>span").css("backgroundColor","red");
31 
32             // 2, 后代选择器 一个空格  (后代,包含子代,也有孙...)
33             $("div li").css("backgroundColor","green");
34 
35 
36         });
37     </script>
38 
39 
40 </body>
层级选择器

补:

:我们用的最多的交集选择器是 “li.className” 。  标签指定式选择器 !

过滤选择器:

名称用法描述
:eq(index) $(“li:eq(2)”).css(“color”, ”red”); 获取到的li元素中,选择索引号为2的元素,索引号index从0开始。
:odd $(“li:odd”).css(“color”, ”red”); 获取到的li元素中,选择索引号为奇数的元素
:even $(“li:even”).css(“color”, ”red”); 获取到的li元素中,选择索引号为偶数的元素

 这类选择器 都带有冒号!

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 </head>
 8 <body>
 9     <ul>
10         <li>这是第1个li</li>
11         <li>这是第2个li</li>
12         <li>这是第3个li</li>
13         <li>这是第4个li</li>
14         <li>这是第5个li</li>
15         <li>这是第6个li</li>
16         <li>这是第7个li</li>
17         <li>这是第8个li</li>
18         <li>这是第9个li</li>
19         <li>这是第10个li</li>
20     </ul>
21     <script src="js/jquery-1.12.4.js"></script>
22     <script>
23         //入口函数
24         $(function () {
25             /*过滤 选择器*/ //它一般都有冒号
26             /*
27             * jQuery 对象如何设置样式 ,可以使用css(name,value);函数设置样式
28             * name:样式名
29             * value:样式值
30             * */
31             //1,:eq(index)  //索引从0开始,
32             // $("li") //获取所有的li 标签 
33             var ret = $("li:eq(4)");//先获取 所有的li ,然后过滤出 index为4 的对象 ,该对象是个jQuery对象。
34             ret.css("backgroundColor","yellow");
35             //2,:odd  //索引号 为 奇数的元素
36             $("li:odd").css("fontSize","18px");
37             //3,:even
38             $("li:odd").css("fontSize","10px");
39             
40         });
41     </script>
42 
43 
44 </body>
过滤选择器(通过索引号)

案例:隔行变色

其他过滤选择器:
:first 第一个
:last 最后一个
:gt(index) 大于哪个索引的
:eq(index) 等于哪个索引的
:lt(index) 小于哪个索引的

筛选选择器(方法)

前面的都是写在字符串中的,而筛选选择器是方法(对象调用)

名称用法描述
children(selector)//无参数时找所有的 $(“ul”).children(“li”) 相当于$(“ul>li”),子类选择器
find(selector) $(“ul”).find(“li”); 相当于$(“ul li”),后代选择器
siblings(selector) $(“#first”).siblings(“li”); 查找兄弟节点,不包括自己本身。
parent() $(“#first”).parent(); 查找父亲
eq(index) $(“li”).eq(2); 相当于$(“li:eq(2)”),index从0开始
next() $(“li”).next() 找下一个兄弟
prev() $(“li”).prev() 找上一次兄弟

筛选选择器的功能与过滤选择器有点类似,但是用法不一样,筛选选择器主要是方法。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 </head>
 8 <body>
 9     <ul>
10         <li>这是第1个li</li>
11         <li>这是第2个li</li>
12         <li>这是第3个li</li>
13         <li>这是第4个li</li>
14         <li id="five">这是第5个li</li>
15         <li>这是第6个li</li>
16         <li>这是第7个li</li>
17         <li>这是第8个li</li>
18         <li>这是第9个li</li>
19         <li>这是第10个li</li>
20     </ul>
21     <div>
22         <ul>
23             <li>我是div的孙子</li>
24             <li>我是div的孙子</li>
25             <li>我是div的孙子</li>
26         </ul>
27         <span>我是div的儿子</span>
28         <a>
29             <span>我是div的孙子</span>
30         </a>
31     </div>
32     <script src="js/jquery-1.12.4.js"></script>
33     <script>
34         //入口函数
35         $(function () {
36             /*筛选  选择器*/
37             // 筛选选择器的功能与过滤选择器有点类似,但是用法不一样,筛选选择器主要是方法。
38             /*
39             * jQuery 对象如何设置样式 ,可以使用css(name,value);函数设置样式
40             * name:样式名
41             * value:样式值
42             * */
43 
44             // 查找兄弟节点,不包括自己本身。parent()$(“#first”).parent();
45             // 查找父亲eq(index)$(“li”).eq(2);相当于$(“li:eq(2)”),index从0开始
46             // next()$(“li”).next()找下一个兄弟prev()$(“li”).prev()找上一次兄弟
47             //1,children(selector) 子代选择器 相当于$(“ul>li”)
48                 //要先有一个基准 对象。然后调对象的方法!
49             // $("div").children("span").css("backgroundColor","yellow");
50 
51             //2,find(selector) 后代选择器 相当于$(“ul li”)
52             //$("div").find("span").css("backgroundColor","yellow");
53 
54             //3,siblings(selector) //查询兄弟节点,不包括自己本身
55             // $("a").siblings("span").css("backgroundColor","red");
56 
57             //4,parent()  //查找父亲
58             // $("a").parent().css("border","1px solid cyan");
59 
60             //5,eq(index) //选择出 索引号为2  的元素
61             // $("ul>li").eq(2).css("backgroundColor","darkred");
62 
63             //6,next() // 查找下一个兄弟
64             $("#five").next().css("backgroundColor","orange");
65             //7,prev() // 查找上一个兄弟
66             $("#five").prev().css("backgroundColor","pink");
67         });
68     </script>
69 
70 
71 </body>
筛选选择器(方法)

【案例:下拉菜单】this+children+mouseenter+mouseleave
【案例:突出展示】siblings+find
【案例:手风琴】next+parent
【案例:淘宝精品】index+eq

下拉菜单案例:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         li{
12             list-style-type: none;
13         }
14         .wrap{
15             width: 330px;
16             height: 30px;
17             background-image: url("images/bg.jpg");
18             margin: 100px auto 0;
19             padding-left: 10px;
20         }
21         .wrap li{
22             background-image: url("images/libg.jpg");
23         }
24         .wrap > ul > li{
25             float: left;
26             margin-right: 10px;
27             position: relative;
28         }
29         .wrap a{
30             display: block;
31             width: 100px;
32             height: 30px;
33             text-align: center;
34             line-height: 30px;
35             color: #000;
36             text-decoration: none;
37 
38         }
39         .wrap li ul{
40             position: absolute;
41             top: 30px;
42             display: none;
43         }
44     </style>
45 
46 </head>
47 <body>
48     <div class="wrap">
49         <ul>
50             <li>
51                 <a href="javascript:void(0);">一级菜单1</a>
52                 <ul class="ul">
53                     <li><a href="javascript:void(0);">二级菜单11</a></li>
54                     <li><a href="javascript:void(0);">二级菜单12</a></li>
55                     <li><a href="javascript:void(0);">二级菜单13</a></li>
56                 </ul>
57             </li>
58             <li>
59                 <a href="javascript:void(0);">一级菜单2</a>
60                 <ul class="ul">
61                     <li><a href="javascript:void(0);">二级菜单21</a></li>
62                     <li><a href="javascript:void(0);">二级菜单22</a></li>
63                     <li><a href="javascript:void(0);">二级菜单23</a></li>
64                 </ul>
65             </li>
66             <li>
67                 <a href="javascript:void(0);">一级菜单3</a>
68                 <ul class="ul">
69                     <li><a href="javascript:void(0);">二级菜单31</a></li>
70                     <li><a href="javascript:void(0);">二级菜单32</a></li>
71                     <li><a href="javascript:void(0);">二级菜单33</a></li>
72                 </ul>
73             </li>
74         </ul>
75     </div>
76 
77     <script src="js/jquery-1.12.4.js"></script>
78     <script>
79         $(function () {
80 
81             //给 a 添加事件
82             var $a = $(".wrap>ul>li>a");
83             $a.mouseenter(function () {
84                 $(this).next().show(); //$(this) 是将DOM 对象 转变为了 jQuery对象!!!
85             });
86 
87             $a.mouseleave(function () {
88                  $(this).next().hide();
89             });
90         });
91     </script>
92 
93 </body>
View Code

上面的案例不太好,不应该给里面的a标签注册事件,应该给li注册事件。因为如果是给a标签注册事件的话,那么鼠标放到二级菜单的时候,就会消失!

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         li{
12             list-style-type: none;
13         }
14         .wrap{
15             width: 330px;
16             height: 30px;
17             background-image: url("images/bg.jpg");
18             margin: 100px auto 0;
19             padding-left: 10px;
20         }
21         .wrap li{
22             background-image: url("images/libg.jpg");
23         }
24         .wrap > ul > li{
25             float: left;
26             margin-right: 10px;
27             position: relative;
28         }
29         .wrap a{
30             display: block;
31             width: 100px;
32             height: 30px;
33             text-align: center;
34             line-height: 30px;
35             color: #000;
36             text-decoration: none;
37 
38         }
39         .wrap li ul{
40             position: absolute;
41             top: 30px;
42             display: none;
43         }
44     </style>
45 
46 </head>
47 <body>
48     <div class="wrap">
49         <ul>
50             <li>
51                 <a href="javascript:void(0);">一级菜单1</a>
52                 <ul class="ul">
53                     <li><a href="javascript:void(0);">二级菜单11</a></li>
54                     <li><a href="javascript:void(0);">二级菜单12</a></li>
55                     <li><a href="javascript:void(0);">二级菜单13</a></li>
56                 </ul>
57             </li>
58             <li>
59                 <a href="javascript:void(0);">一级菜单2</a>
60                 <ul class="ul">
61                     <li><a href="javascript:void(0);">二级菜单21</a></li>
62                     <li><a href="javascript:void(0);">二级菜单22</a></li>
63                     <li><a href="javascript:void(0);">二级菜单23</a></li>
64                 </ul>
65             </li>
66             <li>
67                 <a href="javascript:void(0);">一级菜单3</a>
68                 <ul class="ul">
69                     <li><a href="javascript:void(0);">二级菜单31</a></li>
70                     <li><a href="javascript:void(0);">二级菜单32</a></li>
71                     <li><a href="javascript:void(0);">二级菜单33</a></li>
72                 </ul>
73             </li>
74         </ul>
75     </div>
76 
77     <script src="js/jquery-1.12.4.js"></script>
78     <script>
79         $(function () {
80 
81             //给 li 添加事件
82             var $li = $(".wrap>ul>li");
83             $li.mouseenter(function () {
84                 // $($(this).children()[1]).show();  // 麻烦 
85                 $(this).children("ul").show();  //children 里还是放参数 比较简单!
86             });
87 
88             $li.mouseleave(function () {
89                 $(this).children("ul").hide();
90             });
91         });
92     </script>
93 
94 </body>
children () 最好还是带参数,方便!

mouseover  和 mouseenter 的区别 :

不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。

只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。

推荐使用mouseenter 它的触发次数少,效率低。

https://www.w3school.com.cn/tiy/t.asp?f=jquery_event_mouseleave_mouseout

mouseout  和 mouseleave 的区别 :

不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。

只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。

https://www.w3school.com.cn/tiy/t.asp?f=jquery_event_mouseleave_mouseout

突出显示案例:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         .wrap{
12             width: 632px;
13             height: 394px; /*392 +2*/
14             padding: 10px 0 0 10px;
15             background-color: #000;
16             margin: 100px auto  0;
17             border: 1px solid #ccc;
18         }
19         body{
20             background-color: #000;
21         }
22         li{
23             list-style: none;
24             width: 200px;
25             height: 186px;
26             padding: 0 10px 10px 0;
27             float: left;
28         }
29         a{
30             display: block;
31         }
32 
33 
34 
35 
36 
37 
38     </style>
39 </head>
40 <body>
41     <div class="wrap">
42         <ul>
43             <li><a href="#"><img src="images/01.jpg" alt=""></a></li>
44             <li><a href="#"><img src="images/02.jpg" alt=""></a></li>
45             <li><a href="#"><img src="images/03.jpg" alt=""></a></li>
46             <li><a href="#"><img src="images/04.jpg" alt=""></a></li>
47             <li><a href="#"><img src="images/05.jpg" alt=""></a></li>
48             <li><a href="#"><img src="images/06.jpg" alt=""></a></li>
49         </ul>
50     </div>
51     <script src="js/jquery-1.12.4.js"></script>
52     <script>
53         //入口函数
54         $(function () {
55             var $lis  = $(".wrap li");
56             $lis.mouseenter(
57                 function () {
58                     $lis.css("opacity",0.4);  //全部隐藏
59                     $(this).css("opacity",1);//显示当前
60                 }
61             );
62             $(".wrap").mouseleave(function () {
63                 $lis.css("opacity",1);
64             });
65           });
66     </script>
67 </body>
version 01
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         .wrap{
12             width: 632px;
13             height: 394px; /*392 +2*/
14             padding: 10px 0 0 10px;
15             background-color: #000;
16             margin: 100px auto  0;
17             border: 1px solid #ccc;
18         }
19         body{
20             background-color: #000;
21         }
22         li{
23             list-style: none;
24             width: 200px;
25             height: 186px;
26             padding: 0 10px 10px 0;
27             float: left;
28         }
29         a{
30             display: block;
31         }
32 
33 
34 
35 
36 
37 
38     </style>
39 </head>
40 <body>
41     <div class="wrap">
42         <ul>
43             <li><a href="#"><img src="images/01.jpg" alt=""></a></li>
44             <li><a href="#"><img src="images/02.jpg" alt=""></a></li>
45             <li><a href="#"><img src="images/03.jpg" alt=""></a></li>
46             <li><a href="#"><img src="images/04.jpg" alt=""></a></li>
47             <li><a href="#"><img src="images/05.jpg" alt=""></a></li>
48             <li><a href="#"><img src="images/06.jpg" alt=""></a></li>
49         </ul>
50     </div>
51     <script src="js/jquery-1.12.4.js"></script>
52     <script>
53         //入口函数
54         $(function () {
55             var $lis  = $(".wrap li");
56             $lis.mouseenter(
57                 function () {
58                     $(this).css("opacity",1);//让自己显示
59                     $(this).siblings().css("opacity",0.4); //siblings()是除了自己之外的兄弟 对象!
60                 }
61             );
62             $(".wrap").mouseleave(function () {
63                 $lis.css("opacity",1);
64             });
65           });
66     </script>
67 </body>
version 02
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         .wrap{
12             width: 632px;
13             height: 394px; /*392 +2*/
14             padding: 10px 0 0 10px;
15             background-color: #000;
16             margin: 100px auto  0;
17             border: 1px solid #ccc;
18         }
19         body{
20             background-color: #000;
21         }
22         li{
23             list-style: none;
24             width: 200px;
25             height: 186px;
26             padding: 0 10px 10px 0;
27             float: left;
28         }
29         a{
30             display: block;
31         }
32 
33 
34 
35 
36 
37 
38     </style>
39 </head>
40 <body>
41     <div class="wrap">
42         <ul>
43             <li><a href="#"><img src="images/01.jpg" alt=""></a></li>
44             <li><a href="#"><img src="images/02.jpg" alt=""></a></li>
45             <li><a href="#"><img src="images/03.jpg" alt=""></a></li>
46             <li><a href="#"><img src="images/04.jpg" alt=""></a></li>
47             <li><a href="#"><img src="images/05.jpg" alt=""></a></li>
48             <li><a href="#"><img src="images/06.jpg" alt=""></a></li>
49         </ul>
50     </div>
51     <script src="js/jquery-1.12.4.js"></script>
52     <script>
53         //入口函数
54         $(function () {
55             var $lis  = $(".wrap li");
56             $lis.mouseenter(
57                 function () {
58                     /*
59                     $(this).css("opacity",1);//让自己显示
60                     $(this).siblings().css("opacity",0.4); //siblings()是除了自己之外的兄弟 对象!
61                     */
62                     $(this).css("opacity",1).css("opacity",0.4); //可以这样直接写。
63                     //下面验证 上述写法的合理性
64 
65                     // var ret = $(this).css("opacity",1).css("opacity",0.4);
66                     // console.log(ret);  //返回值为当前的 this 对象!
67                     //即 ,给jQuery 对象设置完之后,返回当前设置的对象! 所以可以链式编程!
68 
69                 }
70             );
71             $(".wrap").mouseleave(function () {
72                 $lis.css("opacity",1);
73             });
74           });
75     </script>
76 </body>
version 03

手风琴案例:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6     <style>
 7         *{
 8             margin: 0;
 9             padding: 0;
10         }
11         li{
12             list-style: none;
13         }
14         .wrap{
15             width: 200px;
16             height: 208px;/*4 个  88 + 120*/
17             margin: 100px auto 0;
18             /*background-color: cyan;*/
19 
20             border: 1px solid #ccc;
21         }
22         ul span{
23             display: block;
24             height: 20px;
25             line-height: 18px;
26             text-align: center;
27             border: 1px solid #ccc;
28             background-color: #e0ecff;
29 
30             cursor: pointer;
31         }
32         ul div{
33             height: 120px;
34             border: 1px solid #ccc;
35             display: none;
36         }
37     </style>
38 </head>
39 <body>
40     <div class="wrap">
41         <ul>
42             <li>
43                 <span>标题1</span>
44                 <div>我是弹出来的div1</div>
45             </li>
46             <li>
47                 <span>标题2</span>
48                 <div>我是弹出来的div2</div>
49             </li>
50             <li>
51                 <span>标题3</span>
52                 <div>我是弹出来的div3</div>
53             </li>
54             <li>
55                 <span>标题4</span>
56                 <div>我是弹出来的div4</div>
57             </li>
58         </ul>
59     </div>
60     <script src="js/jquery-1.12.4.js"></script>
61     <script>
62         /*
63         使用以前的方法,上来就先将所有的 div 关闭!然后再打开现在的!
64         var $spanObjs = $("ul>li>span");
65         var $divs =$("ul>li>div");
66         $spanObjs.click(function () {
67             //先关闭所有的 div
68             $divs.hide();
69             //然后,再显示当前的div
70             $(this).next().show();
71         });
72          */
73         /* version02
74         var $spanObjs = $("ul>li>span");
75         $spanObjs.click(function () {
76             //$(this).next().show();
77             //$(this).parent().siblings().children("div").hide();
78 
79             $(this).next().show().parent().siblings().children("div").hide(); //链式!
80         });
81         */
82         // version03  加上动画效果!
83         var $spanObjs = $("ul>li>span");
84         $spanObjs.click(function () {
85             $(this).next().show(100).parent().siblings().children("div").hide(100); //链式!
86         });
87 
88 
89     </script>
90 
91 </body>
View Code

注:大部分的jQuery 方法都会返回jQuery对象,所以可以进行链式编程!

淘宝精品商品案例:

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>title</title>
  6     <style>
  7         *{
  8             margin: 0;
  9             padding: 0;
 10         }
 11         a{
 12             text-decoration: none;
 13             color: black;
 14         }
 15         li{
 16             list-style: none;
 17         }
 18         .wrap{
 19             width: 300px;
 20             height: 250px;
 21             /*background-color: cyan;*/
 22             margin: 100px auto 0;
 23             border: 1px solid pink;
 24             overflow: hidden;
 25         }
 26         .wrap>div{
 27             float: left;
 28         }
 29         ul{
 30             display: block;
 31             float: left;
 32         }
 33         ul>li{
 34             width: 50px;
 35             height: 27px;
 36             font-size: 12px;
 37             text-align: center;
 38             line-height: 28px;
 39             border-bottom: 1px solid pink;
 40             background: url("images/lili.jpg") repeat-x;
 41         }
 42         ul>li:hover{
 43             background-image: url("images/abg.gif");
 44         }
 45     </style>
 46 
 47 
 48 
 49 </head>
 50 <body>
 51     <div class="wrap">
 52         <ul>
 53             <li><a href="#">女靴</a></li>
 54             <li><a href="#">雪地靴</a></li>
 55             <li><a href="#">冬裙</a></li>
 56             <li><a href="#">呢大衣</a></li>
 57             <li><a href="#">毛衣</a></li>
 58             <li><a href="#">棉服</a></li>
 59             <li><a href="#">女裤</a></li>
 60             <li><a href="#">羽绒服</a></li>
 61             <li><a href="#">牛仔裤</a></li>
 62 
 63         </ul>
 64         <div>
 65             <a href="#"><img src="images/女靴.jpg" alt=""></a>
 66         </div>
 67         <ul>
 68             <li><a href="#">女包</a></li>
 69             <li><a href="#">男靴</a></li>
 70             <li><a href="#">登山鞋</a></li>
 71             <li><a href="#">皮带</a></li>
 72             <li><a href="#">围巾</a></li>
 73             <li><a href="#">皮衣</a></li>
 74             <li><a href="#">男毛衣</a></li>
 75             <li><a href="#">男棉服</a></li>
 76             <li><a href="#">男包</a></li>
 77         </ul>
 78 
 79     </div>
 80     <script src="js/jquery-1.12.4.js"></script>
 81     <script>
 82         $(function () {
 83             var $liObjs = $("div>ul>li");
 84             $liObjs.mouseenter(function () {
 85                 var $text = $(this).text();
 86                 /* version 01
 87                 //$(this).parent().siblings("div").find("img")[0] 为中间的 img 标签 (DOM对象 !)
 88                 //$(this).parent().siblings("div").find("img")[0].src = "images/"+$text+".jpg" ;
 89                  */
 90 
 91                 /*version 02*/
 92                 $(this).parent().siblings("div").find("img").prop("src","images/"+$text+".jpg"); //.prop() 应该是设置属性的,自己试出来的!
 93 
 94             });
 95         });
 96 
 97 
 98     </script>
 99 
100 </body>
View Code

.eq()  和 .get() 的区别:

所以,使用eq获得指定索引的对象可以进行链式编程,而使用.get()不可以。

jQuery调试技巧:

jQuery不会报错,就算找不到对象的时候jQuery也不会报错。因为没找到对象就是返回一个 个数为0 的jQuery 的对象。
一般用console.log() 或者使用 alert() 等就可以找到哪里出错了。

index详解:

jQuery 对象的index 是个函数 jQuery 中很少有属性。

index() 会返回当前元素在所有兄弟元素里面的索引。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>title</title>
 6 
 7 
 8 </head>
 9 <body>
10     <ul>
11         <li><a href="#">我是链接</a></li>
12         <li><a href="#">我是链接</a></li>
13         <li><a href="#">我是链接</a></li>
14         <li><a href="#">我是链接</a></li>
15         <li><a href="#">我是链接</a></li>
16         <li><a href="#">我是链接</a></li>
17         <li><a href="#">我是链接</a></li>
18 
19     </ul>
20     <script src="js/jquery-1.12.4.js"></script>
21     <script>
22         $(function () {
23             //jQuery 对象的index 是个函数 jQuery 中很少有属性
24             $("li").click(function () {   //此时,如果给$("a") 注册事件的话,返回的就都是0 了
25                 console.log($(this).index() ); //点击li ,输出当前的索引
26             });
27         });
28     </script>
29 
30 </body>
View Code

复习:

原文地址:https://www.cnblogs.com/zach0812/p/11958467.html