jQuery知识点整理

风格不统一 提交于 2020-03-23 17:44:44

3 月,跳不动了?>>>

JQuery的设计思想

  1. 多种筛选方式
  $("#box").css("backgroundColor", "red")
  $(".b1").css("color", "green")
  $("ul li").css("marginTop", "10px")
  $("li.box").css("color", "red")
  $("li").filter(".box").css("color", "red")


  $("li:first").css("color", "red")
  $("li:last").css("color", "red")
  $("li:even").css("color", "red")
  $("li:odd").css("color", "red")
  $("li:eq(2)").css("color", "red")
  $("li").eq(2).css("color", "red")
  1. 方法函数化
    // 原生js写法
    window.onload = function() {}
    
    // jquery写法
    $(function() {
      alert("相当于window.onload")
    });
    
    // 添加事件
    $("li").click(function() {
      alert("我被点击了")
    })
    $("li").mouseover(function() {
      this.style.backgroundColor = "blue"
    })
    $("li").mouseout(function() {
      this.style.backgroundColor = "inherit"
    })
  1. 链式操作
  $(function() {
      $("h1")
      .click(function() {
        alert("我被点击了")
      })
      .css("color", "red")
      .mouseover(function() {
        this.style.backgroundColor = "#ccc"
      })
      .mouseout(function() {
        this.style.backgroundColor = "inherit"
      })
    })
  1. 取值赋值合体
    // 原生JS  innerHTML
    // JQ
    $(function() {
      // 取值
      alert($("#div").html());
      // 赋值
      $("h1").html("<h1>我是新赋值的内容</h1>")

      // 取值
      console.log($("input").val())
      // 赋值
      $("input").val("新的内容")
    })

JQuery方法

  filter()  过滤
        $("li").filter(".selected").css("color", "red")
  not()     与filter相反
        $("li").not(".selected").css("color", "red")
  has()     判断子节点是否有满足的条件(筛选的是父元素)
        $("ul").has(".selected").css("color", "red");
  prev()    上一个兄弟元素
        $("h2").prev().css("color", "red")
  next()    下一个兄弟元素
        $("h2").next().css("color", "blue")
  find()    查找子节点
        $("ul").find("li").css("color", "red");
        等价于 $("ul li").css("color", "red");
  index()   获取当前节点在兄弟节点中的下标
        console.log($("li.selected").index())
  eq()      通过下标获取元素
        $("li:eq(2)").css("color", "red")
  attr()   设置和修改行间属性
        console.log($("div").attr("id")); // 获得属性
       $("div").attr("title", "world");   // 设置属性
        $("div").attr({                   // 一次性修改多条属性
          title: "world",
          yyy: "zzz"
        })
  addClass()      添加class
  removeClass()   删除class
        $("div").addClass("box2 box3")
  
  // 获取width的方法
  width()             内容盒
  innerWidth()        填充盒
  outerWidth()        边框盒
  outerWidth(true)    含margin
      $("#div").outerWidth()


  offset()          直接获取当前元素(不含margin),距离视口的距离
                  $("#div2").offset().left
  position()        直接获取当前元素(含margin),距离上一个有定位的父节点的距离
  offsetParent()    向上查找第一个有定位的父节点,
                  $("#div2").offsetParent().css("backgroundColor", "red")

  val()       获取/设置表单元素的值
              console.log($("input").val())   // 获取只能获取第一个
              $("input").val("hello")   // 赋值,会对所有取到的元素赋值
  size()      输出,获取元素的个数
              console.log($("input").size())
              console.log($("input").length())
  each()      循环
              $("input").each(function(item, index) {
                item.value = index; // js写法
                $(item).val(index)  // jq写法
              })

  ready()     $(function(){})  ==  $(document).ready(function(){})
              document加载完毕 肯定在 window加载完毕(window.onload) 之前

  html()      相当于innerHTML()  含html代码
  text()      相当于innerText()  纯文本


  数据串联化
  serialize()       将表单中的数据拼接成查询字符串(querystring) name1=value1&name2=value2
                    search        ?name1=value1&name2=value2
                    querystring   name1=value1&name2=value2
  serializeArray()  将表单中的数据拼接成数组
                    
                    <input type="text" name="a" value="1">
                    <input type="text" name="b" value="2">
                    $("input").serialize() // a=1&b=2


事件


  on()
  off()
      // 给一个元素添加一个事件
      $("#div1").on("click", function() {
        alert("被点击")
      })

      // 给多个事件添加相同函数
      var i = 0;
      $("#div1").on("click mouseover", function() {
        $(this).html(i++)
      })

      // 给不同事件添加不同函数
      $("#div1").on({
        click: () => {alert("被点击了")},
        mouseover: function() {$(this).css("backgroundColor", "red")},
        mouseout: function() {$(this).css("backgroundColor", "chocolate")},
      })

      //事件委托
      $("ul").on("click", "li", function() {
        $(this).css("color", "red");
      })
      
      var i = 5;
      $("#btn").on("click", function() {
        $(`<li>${i++ * 1111}</li>`).appendTo($("ul"))
      })

      // 取消事件
      $("#cancel").click(() => {
        $("#div1").off(); // 取消所有事件所有函数
        $("#div1").off("click"); //取消某一事件的所有函数
        $("#div1").off("click", show);  // 取消某一事件下的指定函数
      })

  // 获取高度 
  scrollTop
        $(window).scrollTop()


  // 1、阻止事件冒泡
  ev.stopPropagation()
          $("div").click(function(ev) {
            alert(this.id);
            ev.stopPropagation();
          })
  // 2、阻止默认行为
  ev.preventDefault()
  // 3、既阻止事件冒泡,又阻止默认行为
  return false
          $("div").click(function(ev) {
            return false
          })

  // 获取鼠标点击位置
  // 
        $(document).click(function(ev) {
          console.log(ev.pageX + " , " + ev.pageY)  // 带滚动距离
          console.log(ev.clientX + " , " + ev.clientY)  // 视口距离
        }) 

  which
      鼠标事件: button
        1   左键
        2   滚轮
        3   右键
      keydown:  keyCode编码
      keyPress: charCode编码

            $(document).mousedown(function(ev) {
              console.log(ev.which); 
            })

            $(window).keydown(function(ev) {
              console.log(ev.which);
            })


  ev.target     兼容后触发对象本身    // <button>按钮</button>
  ev.type       输出事件类型          // click

  ev.data       传入的参数
                $("button").on("click", {name: "aaa", age: 18}, function() {
                  console.log(ev.data);;   // 传入的参数
                  console.log(ev.data.name);  // aaa
                })

  trigger        主动触发(可以触发官方事件,也可以自己绑定的事件)
                $("#play").on("next", function() {
                  alert("下一首")
                })
                $("button").click(function() {
                  $("#play").trigger("next")
                })


特效函数

  hover(funcOver, funcOut)  

  hide()
  show()
    可传入两个参数,hide(动画持续毫秒数, 回调函数)
    【注】动画效果,从左上角收起及展开

  slideDown()
  slideUp()
    【注】动画效果,从上到下卷闸

  fadeIn()
  fadeOut()
  fadeTo(动画持续时间,透明度,回调函数)
    【注】动画效果,淡入淡出
        $(function() {
          $("#div1").hover(function() {
            $("#div1").fadeTo(500,1 , function() {$("#div1").html("移入")})
            $("#div2").fadeIn(500, function() {$("#div1").html("移入")})
          }, function() {
            $("#div1").fadeTo(500, 0.5, function() {$("#div1").html("移入")})
            $("#div2").fadeOut(500, function() {$("#div1").html("移出")})
          })
        })

节点操作

  insertBefore()    before()      之前插入
  insertAfter()     after()       之后插入
  appendTo()        append()      子元素末尾插入
  prependTo()       prepend()     子元素开头插入
  remove()                      移除节点,返回删除的节点本身,但不会保留之前的事件和行为
  detach()                      移除节点,返回删除的节点本身,保留之前的事件和行为
                    $("span").insertAfter($("div"))
  
  选择器
  add()           $("div").add("span").add("ul li").css() 等价于 $("div, span, ul li").css()
  slice(开始,结束)     获取指定范围的元素节点  $("ul li").slice(1,4).css()

  // 【注】下诉所有的方法都可传参数,参数表示选择器  $("#div2").siblings("h2").css("color", "red")
  siblings()       除当前节点外,所有兄弟节点
  nextAll()        之后所有兄弟元素
  prevAll()        之前所有兄弟元素
  parentsUntil()    父节点,到……为止
  nextUntil()       之后兄弟元素,到……为止
  prevUntil()       之前兄弟元素,到……为止




  parent()        从父节点开始,获取第一个匹配的父节点
  parents()       获取父节点们 ,可传入参数作为选择器
  closest()       必须传入参数,作为选择器,从自己开始,获取第一个匹配的父节点


  包装
  wrap()          给每个满足的元素外加个包装      $("span").wrap("<p class='box'></p>")
  wrapAll()       整体外包装
  wrapInner()     内包装(填充)
  unwrap()        删除上一层包装(如有删除,如无不删除),没有参数

  clone()         默认只克隆节点本身,不克隆行为
  clone(true)     既克隆本身,也克隆行为
                      var node = $("#div1").clone(true);
                      node.appendTo($("#div2"));
  

动画函数

  animate(样式,时间,运动方式,回调函数)
    运动形式:慢快慢 swing(默认)
             匀速   linear
             更多运动方式,需引入jQuery-ui框架(目前基本已被淘汰)


        $("#div1").click(function() {
          $("#div1").animate({
            width: 300,
            opacity: 0.5
          }, 4000, "swing", function() {$("#div1").html("移入")})

          $("#div2").animate({
            width: 300, 
            opacity: 0.5
          }, 4000, "linear",function() {$("#div2").html("移入")})
        })

    停止动画 stop()   // 停止该元素当前动画,但是后面动画仍执行
            stop(true)   // 停止该元素所有动画 
            stop(true, true)    // 停止该元素所有动画 ,并将当前动画直接运动完成
            finish()    // 停止该元素所有动画 ,并将所有动画直接运动完成

        $(function() {
           $("#div1").click(function() {
             $("#div1").animate({width: 300}, 2000)
             $("#div1").animate({height: 300}, 2000)
           })
           $("#div2").click(function() {
             $("#div1").stop()   // 停止该元素当前动画,但是后面动画仍执行
             $("#div1").stop(true)   // 停止该元素所有动画
             $("#div1").stop(true, true)  // 停止该元素所有动画 ,并将当前动画直接运动完成
              $("#div1").finish()    // 停止该元素所有动画 ,并将所有动画直接运动完成
           })
         })
    
    小技巧:调用animate前,先调用stop(true),取消之前积攒的动画
        $("#div1").stop(true).animate({width: 300}, 2000)

  delay(延迟时间)  延迟时间后执行动画
        $("#div1").animate({width: 300}, 2000).delay(1000).animate({height: 300}, 2000)


jQuery工具方法

  $.type()      数据类型    $.type(arr)
  $.trim()      删除首尾空格  $.trim(str)    str.trim() (es6官方语法)
  $.inArray()   查找数据的下标  $.inArray(30, arr)   arr.indexOf(30) (es6官方语法)
  $.proxy()     功能类似bind
  $.makeArray() 将伪数组转为数组  $.makeArray(arr)      Array.from(arr)  (es6官方语法)

  .noConflict()     给$起别名,使用 noConflict() 方法为 jQuery 变量规定新的名称:
                    var jq=$.noConflict();
  

jQuery插件方法

  给JQ新增函数
  $.extend()        拓展工具方法    $.xxx()
  $.fn.extend()     拓展JQ方法      $().xxx()

                    $.extend({
                      aaa: function() {
                        alert("这是一个工具方法")
                      }
                    })

                    $.fn.extend({
                      bbb: function() {
                        alert("这是一个JQ方法")
                      }
                    })

jQuery的cookie方法

  $.cookie()

  具体调用的格式
  $.cookie(name)          通过name取值
  $.cookie(name, value)   设置name和value
  $.cookie(name, value, {
    可选项
    raw: true,     value不进行编码, 默认false
    expires: 7      多少天后过期
  })
  $.cookie(name, null)    删除cookie

                          $.cookie("ming", "pwssss", {
                              expires: 7,
                              raw: false
                          })

jQuery的ajax方法

  $().load()
  $.get()
  $.post()

  // $.ajax()  使用方法
        $(function() {
          $("#btn1").click(function() {
            $.ajax({
              type: "get",
              url: "1.txt",
              data: {
              },
              success: function(data, statusText, xhr) {
                /*
                  statusText: success error
                  xhr: ajax对象
                */
                console.log(data);
                console.log(statusText)
              },
              error: function(msg) {
                console.log(msg)
              }
            })
          })
        })

  // 跨域方法
        // 加上
        dataType: "jsonp"
  
  // $.load()
  // $.load(路径 及选择器,回调函数(data, statusText, xhr))
  // 如数据内有html标签,可在路径后加选择器,筛选获取的数据
        $("button").click(function() {
          $("div").load("2.txt h2", function(data, statusText, xhr){
            console.log(data);
            console.log(statusText);
            console.log(xhr.status);
          })
        })

  // $.get()
  // $.get(路径,回调函数(data, statusText, xhr))
        $.get("1.txt", function(data, statusText, xhr) {
          console.log(data)
        })


  // $.post()
  // $.post(路径,回调函数(data, statusText, xhr))
      
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!