JQ 1

1. 什么是jQuery

2. 查找

1. 什么是jQuery

  jQuery是快速的,简洁的第三方javascript库

 为什么:

    1. DOM操作的终极简化:

         DOM的问题: 核心DOM: 万能,繁琐

                              HTML DOM: 简洁,不是万能

         jQuery在DOM操作的4个方面提供了终极简化:

         1. 查找元素, 操作元素(添加,删除,修改(内容,属性,样式))

         2. 事件处理:

         3. 动画效果: (了解)

         4. AJAX操作:

    2. 屏蔽了绝大多数浏览器兼容性问题:

         只要jQuery让我们用的,都是兼容的

 何时: 今后绝大多数公司的项目和绝大多数前端框架都是使用jQuery开发的。

 如何:

   1. 关于版本:

       1.x: 兼容旧浏览器

          未压缩: jquery-1.11.3.js ——可读性好,便于学习,大

          压缩: jquery-1.11.3.min.js ——生产环境使用,小

                 三方面: 去掉注释, 去掉换行和空字符, 极简化变量名

       2.x: 不再兼容旧浏览器

   2. 手册:

       day1 核心和选择器

       day2 选择器,属性,文档处理和css样式

       day3 事件和动画

   3. 开始使用:

      Step1: 下载jquery.js 保存在项目js文件夹下

      Step2: 在页面用<script src 引入jquery.js文件

         向window中添加了jQuery对象

            jQuery对象是封装所有简化版DOM操作API的全局对象

           window.jQuery=window.$=jQuery

      Step3: 使用jQuery简化版API执行DOM操作

           $("选择器") 查找元素

               $底层其实使用的还是:

                 getElementById

                 getElementsByTagName,ClassName,...

                 querySelectorAll

             问题: 使用DOM API返回的结果不能使用jQuery简化版API

             $的返回值: jQuery结果集对象——类数组对象

                只有$返回的结果,才能使用简化版API

                普通DOM API返回的是标准DOM对象,不能使用简化版API。

             jQuery API和DOM API 不能混用,也不通用

           $(...).click(function(){...})

   鄙视题: DOM对象 vs jQuery对象

      DOM对象: W3C的DOM标准规定,浏览器厂商已经实现的现成的对象。能使用DOM API——繁琐

      jQuery对象: 由jQuery库创建的,由第三方实现的。

         本质: 一个封装找到的一组DOM对象的类数组对象—集合

                 并在父对象中提供了简化版API

   要想使用jQuery简化版API,必须先获得jQuery结果集合对象:

    如何: 1. 用$("选择器")直接查找对象,返回的就是

            2. 如果已经获得一个DOM对象:

                用$(DOM对象), 创建一个结果集合对象,并将DOM对象放入其中。

    jQuery结果集合对象的核心API:

     $(...).size() => $(...).length 找到的元素个数

     $(...).get(i) => $(...)[i]  从jQuery结果中取出DOM对象

            何时: 如果有jQuery实现不了的功能

                     就要见DOM对象从jQuery结果中取出

                     继续使用DOM API

     $(...).index($("要查找的元素"))

            返回要查找的元素在整个结果集中的位置

2. 查找:

   按选择器查找: jQuery支持所有css选择器

       只要jQuery允许使用的css选择器,都屏蔽了兼容性问题

   包括:

     基本选择器: 同CSS

        #id   .class   element   *    selector1,selector2,...

     规律: $("...")返回的jQuery结果集合的所有API都自带forEach

                后续的修改操作,会自动作用到每个找到的元素上

     层次选择器: 同CSS

        select1 select2 后代

        select1>select2 直接子代

        select1+select2 紧邻的下一个兄弟

        select1~select2 之后所有符合条件的兄弟

     过滤选择器:

       基本过滤: 位置过滤: 根据元素在结果集中的下标位置选择

          :first/last : 在结果集中选择第一个和最后一个元素

          *以下选择器下标从0开始!*

          :even/odd: 选择结果集中*下标*为偶数/奇数的元素

          :eq/gt/lt(i): 选择下标=,>或<i位置的其他元素

        何时: 只要根据元素在结果集合中的下标位置选择元素    

       子元素过滤: 选择在父元素下指定位置的子元素

              强调: 参照的不是在结果集合中的位置

                       而是在父元素下的位置

          :first-child/last-child

          *以下选择器下标从1开始*

          :nth-child(n/odd/even/2n/2n+1)

       :not(selector): 同css,  否定选择器,可否定一切选择器

1. 查询:

   练习:

     $(...).API() : 规律:  1. 自带forEach

                                  2. 每个API都返回原结果集合

   内容过滤: (了解) 根据元素的内容查找

     :contains(text): 查找内容中包含指定文本的元素

       span:contains("购物车"): 找内容中包含"购物车"的span

     :empty : 查找不包含任何内容的空元素

     :parent : 查找只要包含内容的父元素

     :has(selector) : 选择包含满足selector要求的子元素的父元素

        比如: div:has(.active) 包含class为active的子元素的div

   可见性过滤:  同CSS (了解)

     :visible : 匹配所有可见的元素

     :hidden : 匹配所有不可见的元素display:none

                    和type="hidden"的

   属性过滤选择器: 同CSS

    [属性] : 查找拥有该属性的元素

    [属性="值"] : 查找指定属性的值为"值"的元素

    [属性!="内容"] : 查找指定属性的值不为"值"的元素

    [属性^="内容"] : 查找指定属性的值以"内容"开头的

    [属性$="内容"] : 查找指定属性的值以"内容"结尾的

    [属性*="内容"] : 查找指定属性的值包含"内容"的

    [条件1][条件2]... : 查找同时满足条件1,2...的元素

   

   按节点间关系查找:

   1. 父子关系:

   $(parent).children() 查找parent下所有直接子元素

                  .children(selector)  查找parent下符合条件的元素

   $(parent).find(selector)  查找parent下所有后代元素中符合条件的

   $(child).parent()  获得child的父元素

   2. 兄弟关系:

      $(...).next/prev([selector])  获得下/前一个兄弟元素

     $(...).nextAll/prevAll([selector]) 获得之后/之前所有的兄弟元素

      $(...).siblings([selector]) 获得前后所有的兄弟元素

  练习:

    获取css样式属性的值:

      var 属性值=$(...).css("css属性名")

         .css默认获取的就是计算后的完整样式!

         .css默认设置的是内联样式

    问题: css样式属性修改,代码量大

    解决: 用class代替单独修改css样式

      $(...).addClass("类名") 向选中的元素添加类名

      $(...).removeClass("类名") 从选中的元素上移除类名

      $(...).hasClass("类名") 判断选中的元素上是否包含指定类名

      如果希望在有/没有"类名"之间切换:

      $(...).toggleClass("类名");