jQuery 循序渐进 (总结版)

深入学习 jQuery

jQuery 的优点

  • 无所不能的选择器
  • 无处不在的隐式迭代
  • 无与伦比的链式编程
  • jQuery 号称全兼容

jQuery 选择器

  • css 中的选择器,这里都可以用
  • 特殊选择器
    • :first 获取第一个
    • :last 获取最后一个
    • :eq(n) 获取索引为 n 的那一个
    • :odd() 获取索引为 奇数 的那些
    • :even() 获取索引为 偶数 的那些

jQuery 筛选器

  • first() 筛选出元素集合里面的第一个
  • last() 筛选出元素集合里面的最后一个
  • eq(n) 筛选出一个集合里面索引为 n 的那个元素
  • next() 筛选出元素后面一个兄弟元素
  • nextAll() 筛选出元素后面所有的兄弟元素
  • nextUntil(选择器) 筛选出元素后面所有的兄弟元素,直到选择器为止
  • prev() 筛选出元素上一个兄弟元素
  • prevAll() 筛选出元素前面所有的兄弟元素
  • prevUntil(选择器) 筛选出元素前面所有兄弟元素,直到选择器为止
  • parent() 筛选出元素的父元素
  • parents() 筛选出元素的所有祖先元素,直到 HTML 元素为止
  • parentsUntil(选择器) 筛选出元素的所有祖先元素,直到选择器为止
  • children() 筛选出元素的所有子级元素
  • children(选择器) 筛选出符合选择器的子级元素
  • siblings() 筛选出元素的所有兄弟元素
  • siblings(选择器) 筛选出所有兄弟元素中符合选择器的元素
  • find(选择器) 其一:元素集合的每一个后代满足选择器的元素;其二:元素后代里面满足选择器的元素
  • index() 获取元素在父级元素下的第几个元素索引值

jQuery 操作文本内容

  • html() 一个读写方法
    • 不传递参数时,表示获取元素内部的 超文本内容
    • 传递参数时,表示你设置元素内部的 超文本内容
  • text() 一个读写方法
    • 不传递参数时,表示获取元素内部的 文本内容
    • 传递参数时,表示设置元素内部的 文本内容
  • val() 一个读写方法,用来操作表单元素的 value 值
    • 不传递参数时,表示获取标签内的 value 值
    • 传递参数时,表示设置便签内的 value 值

jQuery 操作元素类名

  • addClass() 添加类名
    • 给元素集合里面的所有元素添加类名(没有这个类名就加上,有就不加)
  • removeClass() 删除类名
    • 给元素集合里面的所有元素删除这个类名
  • toggleClass() 切换类名
    • 给集合里面的所有元素切换类名,即:元素本身有这个类名就删除,没有就添加
  • hasClass() 判断元素有没有这个类名
    • 返回一个布尔值

jQuery 操作元素样式

  • css() 一个读写属性
    • css(“样式名称”) 获取元样式,行内样式和非行内样式都可以获取到
    • css(“样式名称”, “样式值”) 样式值不写单位,则默认是 px
    • css({}) 可以批量操作样式

jQuery 操作元素属性

  • attr() 和 removeAttr()
    • attr() 读写方法
    • 所有的属性都会显示在标签上(原生属性和自定义属性)
    • 不管属性值设置成什么,都会变成字符串
    • removeAttr() 用来删除 attr() 设置的属性
  • prop() 和 removeProp()
    • prop() 读写方法
    • 非原生属性不会显示在标签上
    • 属性值设置成什么类型就是什么类型
    • removeProp() 不能删除原生属性
  • data() 和 removeData()
    • 专门操作 自定义属性的
    • data() 也可以获取到写在标签内的 **h5 标准(data-xxx)**的自定义属性

jQuery 事件绑定

  • on() 方法,专门用来绑定事件的

    // 五种传参方式
    on('事件类型', '事件处理函数')
    on('事件类型', '事件委托', '事件处理函数')
    on('事件类型', '复杂数据类型', '事件处理函数')
    on('事件类型', '事件委托', '复杂数据类型', '事件处理函数')
    on({})   // 给一个元素绑定多个事件的方式,这种方式不能实现事件委托
    
  • off() 方法,专门用来解绑事件的

    // 两种传参方式
    off('事件类型')    // 给该事件的所有处理函数解绑
    off('事件类型', '事件处理函数名字')    // 解绑指定的事件处理函数
    
  • trigger() 方法,专门用来触发事件的

    • 不用点击就可以自动触发

jQuery 把常用事件封装成了函数

  • 例如
    • click()
    • dblclick()
    • mouseover() 等

jQuery 中唯一一个特殊的事件函数

  • hover() ,表示事件悬停动作
  • 语法:hover(‘鼠标移入触发的事件函数’, ’鼠标移出触发的事件函数‘)
  • 当只传入一个事件处理函数时,鼠标移入移出都会触发这个事件处理函数

jQuery 操作节点

  • 创建节点

    • $(html 格式文本)
  • 插入节点

    • 插入父级关系节点
      • 父级元素.append(要插入的元素) 插在最后
      • 要插入的元素.appendTo(父级元素) 插在最后
      • 父级元素.prepend(要插入的元素) 插在最前
      • 要插入的元素.prependTo(父级元素) 插在最前
    • 插入兄弟节点
      • 页面元素.after(要插入的元素) 在页面元素后面插入一个元素
      • 要插入的元素.insertAfter(页面元素) 把元素插在页面元素的后面
      • 页面元素.before(要插入的元素) 在页面元素的前面插入一个元素
      • 要插入的元素.insertBefore(页面元素) 把元素插在页面元素的前面
  • 删除节点

    • empty() 把标签的内容清空,干掉里面所有的子节点
    • remove() 把自己从页面中移除掉
  • 替换节点

    • 页面元素.replaceWith(替换元素)
    • 替换元素.replaceAll(页面元素)
  • 克隆节点

    • 页面元素.clone(布尔值, 布尔值) 参数可选,默认是 false

      • 第一个参数:表示是否克隆元素事件
      • 第二个参数:表示是否克隆子节点的事件

      注意:当第一个参数为 false 时,第二个参数就没有意义了

jQuery 获取元素尺寸

三套方法,四种使用方式

  • width() 和 height() 获取元素内容的宽高,不包括 padding
    • 浏览器可视区域的高度 $(‘window’).height()
  • innerWidth() 和 innerHeight() 获取元素内容 + padding
  • outWidth() 和 outHeight() 获取元素内容 + padding + border
  • outWidth(true) 和 outHeight(true) 获取元素内容 + padding + border + margin

jQuery 获取元素位置

  • offset()
    • 不传递参数时,获取元素相对页面的位置,返回值 { left: xxx, top: xxx }
    • 传递参数时,设置元素的位置,这里设置的是绝对位置,不管元素本身和页面的位置是多少
  • position() 只读方法
    • 获取元素相对定位父级元素的位置关系,返回值 { left: xxx, top: xxx }

jQuery 获取卷曲出去的距离

  • scrollTop() 读写方法,获取页面向上卷曲的距离
    • 类似原生 js :document.documentElement.scrollTop
  • scrollLeft() 读写方法,获取页面上左卷曲的距离

jQuery 的方法

  • ready() 类似于原生 js 中的 window.onload 事件

    • 会在页面 HTML 结构加载完成后执行
    • 简写: $(function() { })
  • each() 遍历数组的方法

    • 用的比较少,因为有 隐式迭代,会自动遍历
    arr.each((index, item) = { })  // 注意:第一个参数是 index
    

jQuery 的动画

  • 标准动画
    • show() 显示
    • hide() 隐藏
    • toggle() 切换
  • 折叠动画
    • slideDown() 显示
    • slideUp() 隐藏
    • slideToggle() 切换
  • 渐隐渐现动画
    • fadeIn() 显示
    • fadeOut() 隐藏
    • fadeToggle() 切换
  • 综合动画
    • animate({}, 动画时间, 动画曲线, 动画结束后的回调)
  • 停止动画
    • stop() 函数触发就立即停止动画,运动到哪,停在哪
    • finish() 函数触发就立即停止动画,瞬间达到运动完成位置

jQuery 的 ajax 请求

  • $.get(请求地址,携带的参数,成功的回调,期望后端返回的数据格式)

    • 请求地址:请求的后端 url 地址 (必填)
    • 携带的参数:可以是字符串(key1=value1&key2=value2),也可以是对象 {a: 10, b: 20}
    • 期望的数据格式,就是需不需要 jQuery 帮你解析响应体,默认不解析,当你传递一个 ‘json’,会自动执行 JSON.parse()
  • $.post(请求地址,携带的参数,成功的回调,期望后端返回的数据格式)

    • 传参与 get 请求一样
  • $.ajax({})

    • 用来发送综合 ajax 请求(get,post,put…),也可以发送 jsonp 请求
    $.ajax({
            url: '', // => 请求地址(必填)
            type: '', // => 请求方式(GET, POST, ...) 默认是 GET
            data: '', // => 携带到后端的参数
            dataType: '', // => 期望后端返回的数据类型, 默认不解析
            async: true, // => 是否异步, 默认是 true
            success: function () {}, // => 成功的回调
            error: function () {}, // => 失败的回调
            timeout: number, // 单位是 ms, 超时时间(超过你写的时间没有响应, 那么就算失败)
            cache: true, // 是否缓存, 默认是 true
            context: 上下文, // 改变回调函数里面的 this 指向
            ...
        })
        // 注意:type 也可以写成 method,  在2015以后版本有了 promise ,
        // 所以 也可以 .then() 的方式 来接收 成功的回调
    
    • 发送 jsonp 请求
    // 发送一个 jsonp 请求
    $.ajax({
            url: 'http://127.0.0.1/server/jsonp.php',
            dataType: 'jsonp', // 表示我要发送一个 jsonp 请求
            jsonp: 'cb', // 你带到后端表示你函数名的那个 key, 默认值是 callback
            cache: true, // 是否缓存,当 dataType === 'jsonp' 的时候, 默认 cache 就是 false
            success: function (res) {
                console.log(res)
            }
        })
    

jQuery 的 ajax 全局钩子函数

这些全局钩子函数都是挂在 ajax 身上的,ajax 的每一个动作都与全局钩子函数有关系

  • $(window).ajaxStart() 会在同一个作用域内多个 ajax 请求的时候,第一个 ajax 请求开始之前触发

  • $(window).ajaxSend() 每一个 ajax 请求发送出去之前触发

  • $(window).ajaxSuccess() 每一个 ajax 请求成功的时候触发

  • $(window).ajaxError() 每个 ajax 请求失败的时候触发

  • $(window).ajaxComplete() 每一个 ajax 请求完成的时候触发

  • $(window).ajaxStop() 会在同一个作用域内多个 ajax 请求的时候,最后一个 ajax 请求完成以后触发

    注意:ajaxStart() 和 ajaxStop() 两个钩子函数同一作用域下只触发一次

    利用:钩子函数可以做 loading 加载效果

jQuery 的多库并存机制

  • 因为 jQuery 引入页面以后, 向全局添加了 $ 和 jQuery 两个变量,为了避免引入别的库,而导致变量命名冲突,jQuery 中提供了一个方法解决这个问题。

    /*
    	语法: $.noConflict() 或者 jQuery.noConflict()
                => 当你执行了 noConflict() 以后, jQuery 就交出了 $ 的控制权
                => jQuery 向全局暴露的不在有 $ 这个名字了
                => 当你执行了 noConflict(true) 以后, jQuery 就交出了 $ 和 jQuery 的控制权
                => 交出去以后, 我的 jQuery 就用不了
              -> noConflict() 的返回值: 就是一个新的控制权
                => 你只要接收一个返回值, 你定好的变量是什么
                => jQuery 的控制权就是什么
          */
    	// 交出 $ 的控制权
        	$.noConflict()
    
    	// 交出 $ 和 jQuery 的控制权
        	$.noConflict(true)
    
        // 改变 jQuery 的控制权
        	var $$ = $.noConflict(true)  // 控制权变成 $$ 
    

jQuery 的插件扩展机制

  • $.extend()

    • 扩展个 jQuery 本身使用的
    // 1. 扩展给 jQuery 本身
    // 例如:jQuery 本身没有操作 cookie 的方法
        $.extend({
            setCookie: function (key, value, expires) {
                // 写上设置 cookie 的方法
                if (expires) {
                    var time = new Date()
                    time.setTime(time.getTime() - 1000 * 60 * 60 * 8 + 1000 * expires)
                    document.cookie = `${key}=${value};expires=${time}`
                } else {
                    document.cookie = `${key}=${value}`
                }
            },
            getCookie: function (key) {
                // ...
            }
        })
    
  • $.fn.extend()

    • 扩展给元素集合使用的

      注意: . e x t e n d ( .extend( .extend(.fn, 对象) 相当于是 $.fn.extend(对象)

    // 2. 扩展给元素集合
        //  例如:扩展一个 input 全选的方法
        //    方法以执行, 就能让 input checkbox 变成选中状态或者不选中状态
        $.fn.extend({
            selectAll: function (type = true) {
                // type 就是你传递进来的选中或者不选中一个标志
                //   你不传递的时候, 我默认是 true, 你传递了就用你传递的
                // console.log(this) // 就是你调用的时候前面的那个元素集合
                this.each(function (index, item) {
                    // 让元素集合中的每一个 input 的 checked 属性为 true
                    item.checked = type
                })
    
                // return 这个元素集合, 达到一个链式编程的效果
                return this
            }
        })
    

jQuery 拷贝对象

  • $.extend()

    /* 
      jQuery 的拷贝对象问题
         $.extend()
               传递一个对象的时候, 可以做到插件扩展机制,
               传递多个对象的时候, 可以将后面几个对象的内容复制到第一个对象里面
         语法:
          $.extend(是否深拷贝, 对象1, 对象2, 对象3, ...)
                是否深拷贝: 默认是 false, 可以不写,
                从 对象2 开始, 后面所有对象的内容都会被拷贝到 对象1 里面,
                再拷贝的时候, 如果有重复的 key, 那么以写在后面的为准(后来者居上)
    */
    
    

点击学习更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值