• 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

    复习:

  • 相关阅读:
    Best code水题之路
    我的CodeF水A题之路
    studing(来自转载)
    BFS
    fibonacci数列(五种)
    Redis阻塞队列原理学习
    the enum hack
    Divide Two Integers
    Surrounded Regions
    Search in Rotated Sorted Array
  • 原文地址:https://www.cnblogs.com/zach0812/p/11958467.html
Copyright © 2020-2023  润新知