[TOC]
  • 概念:jquery是一个轻量级的前端框架,在该框架里面封装的是js函数代码,和css样式无关,但是可以通过jquery里面的提供的方法动态的修改操作css属性。
  • 要想使用jquery框架,必须在html文件中引入jquery框架

jQuery的入口函数

  • 概念:浏览器一旦打开,就默认调用的方法。
  • 原生js的入口函数

    //原生js的入口函数
    window.onload = function(){
      console.log("原生的入口函数");
    }
    
  • jquery的入口函数

    • 第一种方式

      $(document).ready(function(){
      console.log("jquery的入口函数方式1");
      })
      
    • 第二种方式

      jQuery(document).ready(function(){
      console.log("jquery 入口函数方式2");
      })
      
    • 第三种方式

      jQuery(function(){
      console.log("jquery的入口函数方式3");
      })
      
    • 第四种方式(推荐)

      $(function(){
      console.log("juqery的入口函数推荐方式");
      })
      
  • 原生js入口函数和jquery入口函数的区别

    • 1、原生js的入口函数需要等待body中标签全部加载完毕才会执行,而juqery直接执行
    • 2、原生js的入口函数如果存在多个,后面的会把原来的值覆盖,而jquery都会执行。

      jquery的选择器(重点)

      基本选择器

      //id选择器
      $("#id名称").css("border","2px red solid");
      //class选择器
      $(".class名称").css("border","2px red solid");
      //element(标签选择器)
      $("标签名").css("border","2px red solid");
      //全局选择器
      $("*").css("border","2px red solid");
      //多选择器同时生效
      $("选择器1,选择器2,选择器n").css("border","2px red solid");
      

      层级选择器

      //1、选择器1 选择器2,在第一个选择器满足条件的情况下,再用第二个选择器进行选择相应的标签
      $("#one .items").css("background-color","red");
      //2、选择器1  > 选择器2,只会在直接子标签中寻找符合要求的标签
      $("parent > child").css("background-color","red");
      //3、选择器1 + 选择器2,选择出用了选择器1标签的下一个兄弟标签,兄弟标签满足第二个选择器
      $("#flag + li").css("background-color","red");
      //4、选择器1 ~ 选择器2,选择出用了选择器1的所有标签,选出符合要求的下面所有的兄弟标签。
      $("#flag ~ li").css("background-color","red");
      

筛选选择器

//:first 从满足条件的标签中再次筛选出第一个标签
$("#two li:first").css("border","red 2px solid");
//:last  从满足条件的标签中再次筛选出最后一个标签
$("#two li:last").css("border","2px red solid");
//not(selector),从满足条件的标签中,再次筛选出没有使用selector选择器的标签
$("#two li:not('.items')").css("background-color","red");
//:even,从满足条件的标签中,找出下标为偶数的标签,下标从0开始计算
$("#two li:even").css("background-color","grey");
//:odd,从满足条件的标签中,找出下标为奇数的标签,下标从0开始计算
$("#two li:odd").css("background-color","yellow");
//:gt(index),从满足条件的标签中,找出比index下标要大的标签,不包含index位置,index从0开始计算
$("#two li:gt(2)").css("background-color","red");
//:lt(index),从满足条件的标签中,找出比index下标要小的标签,不包含index位置,index从0开始计算
$("#two li:lt(2)").css("background-color","red");
//:eq(index),从满足条件的标签中,选择出指定下标处的标签,下标从0开始计算
$("#two li:eq(2)").css("background-color","black");

内容选择器

//1:contains(text),从满足条件的标签中再次根据内容选择出指定标签
$("#two li:contains('A')").css("background-color","red");
//2:empty,从满足条件的标签中找到两个标签之间没有任何内容的标签
$("#two li:empty").css("background-color","red");
//3:has(selector),冒号左边为父标签,右边为子标签,从结果集中找出父标签下面,是否有指定的子标签,或者子标签中是
否使用了指定的选择器,如果使用了,则将父标签选择上。
$("li:has('.items')").css("border","red solid 2px");
//4:parent,从结果集中找出有子标签或者有内容的标签
$("#one #flag:parent").css("border","2px red solid");

可见性选择器

//选择出隐藏的标签
$("div:hidden")
//选择出显示的标签
$("#two:visible")

属性选择器

//选择出有指定属性名的标签
$("img[title]").css("border","2px red solid");
//多个属性同时存在才能被选择上的标签
$("img[title][alt]").css("border","2px red  solid");
//选择出指定标签名的指定属性值
$("img[title='这是一只猫']").css("border","2px red solid");
//选择出指定标签名不等于指定值,如果标签中没有该属性名,也将被选择出来。
$("img[title != '这是一只猫']").css("border","2px red solid");
//选择出指定标签名,要求该标签名的值要以指定值开始
$("img[title ^= '是']").css("border","2px red solid");
//选择出指定标签名,要求该标签名的值要以指定值结尾
$("img[title $= '猫']").css("border","2px red solid");
//选择出指定标签名,要求该标签名的值包含指定字符即可
$("img[title *= '懒']").css("border","2px red solid");

子元素选择器

//选择出符合要求的第一个元素,要求:该标签必须是在同一个父标签下的第一个孩子标签
$("li:first-child").css("border","2px red solid");
//选择出符合要求的最后一个元素,要求:该标签必须是在同一个父标签下的最后一个孩子标签
$("li:last-child").css("border","2px red solid");
//:nth-child(count),count表示第几个,从1开始计算。
$("li:nth-child(2)").css("background-color","red");
//only-child,选择出本身作为唯一的一个子标签
$("li:only-child").css("background-color","red");

表单选择器(重点)

//1、:input,选择出所有的input标签,包括button标签
$("*:input").css("border","2px red solid");
//:text,选择出type的值为text的所有标签
$("*:text").css("border","2px red solid");
//:password,选择出type的值为passwor的标签
$("*:password").css("border","2px blue solid");
//:radio,选择出type的值为radio的标签
$("*:radio").css("width","100px");
//:checkbox,选择出所有的checkbox标签
$("*:checkbox").css("width","100px");
//:submit,找出所有的submit标签,也会找出<button></button>
$("*:submit").css("border","2px red solid");
//:reset,找出所有的重置按钮
$("*:reset").css("border","2px red solid");
//:button,找出所有的button按钮
$("*:button").css("border","2px red solid");
//:file,选择出所有的文件按钮
$("*:file").css("border","2px red solid");

jQuery中的事件(重点)

1、鼠标单击事件
$(".btn").click(function(){
    alert("单击事件");
})

2、鼠标双击事件
$(".btn").dblclick(function(){
    alert("鼠标双击事件");
});

3、mourseenter,当鼠标放在标签上就触发
$("img").mouseenter(function(){
    $("img").css("width","400px").css("height","400px");
});

4、mouseleave,当鼠标离开标签就触发
$("img").mouseleave(function(){
    $("img").css("width","200px").css("height","200px");
})

5、失去焦点事件(重要)
$("#userName").blur(function(){
     alert("已经失去焦点");
 })

6、获取焦点
$("#userName").focus(function(){
    console.log("获取了焦点");
})

7、键盘被摁下事件
$(window).keydown(function(event){
    console.log(event.keyCode);
})

8、键盘被松开
$(window).keyup(function(event){
    console.log(event.keyCode);
})

jquery中的属性

属性

1、向一个标签中增加一个属性或者修改一个属性值
区分:如果该标签中没有该属性,作用是新增属性和属性值
如果该标签中已经有该属性了,作用是修改该属性的值。
$("img").attr("title","这是一只猫");

//删除一个属性
$("img").removeAttr("title");

css类

//操作新增class属性
$("img").mouseenter(function(){
    $("img").addClass("current");
})

//删除一个class
$("img").mouseleave(function(){
    $("img").removeClass("current");
})

//判断一个标签中是否包含指定的class名称
var flag = $("img").hasClass("current");

HTML代码/文本/值

1、html(),在一个标签中嵌入一个新的html代码,和原生js中的innerHtml作用一致。
$("#one").html("<img>");
2、text();获取两个标签之间的文本内容,如果text()括号中给了值,那作用改为修改标签之间的文本或者新增。
var val = $("#one").text();
3、val();获取者输入框中的值。如果括号中有值,则添加在输入框中
var val = $("#userName").val("aaaa");

jQuery的筛选

过滤

1、eq(index),从符合条件的标签结果中,找出指定的标签
$("#one li").eq(0).css("border","2px red solid");
2、//first(),从符合要求的结果中,找出第一个标签
$("#one li").first().css("border","2px red solid");
3、//last(),从符合要求的结果中,找出最后一个标签
$("#one li").last().css("border","2px red solid");
4、is(),主要用于判断,判断是否是指定标签名或者指定标签中是否使用了指定选择器
var bool = $("#temp").is("li");
5、has(),找到指定的标签,通过has方法,判断子标签中是否有满足要求的,如果有满足的,则自身被选择。
$("li").has("ul").css("border","2px red solid");
6、not(),从符合要求的标签结果中,找出没有使用指定属性的标签
$("li").not(".items").css("border","2px red solid");
7、slice(start,end),从符合要求的结果集中找到指定范围的标签(包前不包后)
$("#two li").slice(0,3).css("border","2px red solid");

查找

1、children(),找到指定标签的直接子标签,后代标签找不到。
$("#one").children().css("border","2px red solid");
2、find(),从符合要求的标签结果中,再找到筛选出find中符号要求的标签。
$("ul").find(".items").css("border","2px red solid");
3、next(),找到指定标签的下一个兄弟标签
$("#aa").next().css("border","2px red solid");
4、nextAll(),找到指定标签下面所有的兄弟标签。
$("#aa").nextAll().css("border","2px red solid");
5、parent(),找到指定标签的直接父标签。
$("#flag").parent().css("border","2px red solid");
6、parents(),找到指定标签的所有长辈标签
$("#flag").parents().css("border","2px red solid");
7、prev(),找到指定标签的上一个兄弟标签
$("#aa").prev().css("border","2px red solid");
8、prevAll(),找到 指定标签的上面所有兄弟标签
$("#aa").prevAll().css("border","2px red solid");
9、siblings(),找到指定标签的所有兄弟标签
$("#aa").siblings().css("border","2px red solid");

jQuery文档操作

内部插入

1、append(),通过父标签,添加到自己的子标签中,并且是在后面追加
var img = $("#out").append("<img src='../img/1.jpg'>");
2、appendTo(),先创建要添加的子标签,在通过该方法放到指定父标签中
$("<img src='../img/2.jpg'>").appendTo("#out");
3、prepend(),在父目录中添加子标签,在前面追加。
$("#out").prepend("<img src = '../img/3.jpg'>");
prependTo(),先创建要添加的子标签,再将子标签添加到父标签中。
$("<img src = '../img/4.jpg'>").prependTo("#out");

外部插入

//after(),在指定标签的后面追加标签
$("img:eq(1)").after("<img src = '../img/1.jpg'>");
//before(),在指定标签之前追加标签
$("img:eq(1)").before("<img src = '../img/2.jpg'>");

删除标签

1、empty(),将一个父标签中的子标签,全部清空,也可以清空标签之间的内容
$("#out").empty();
2、remove();删除指定标签
$("img:eq(1)").remove();

ajax异步请求

原生ajax的get方式请求

<script type="text/javascript">
        function test(){
            //实现ajax异步请求
            //创建ajax对象
            var ajax =new XMLHttpRequest();

            //开启open方法
            ajax.open("get","/WebDemo6/ajax?userName=root&password=admin");

            //发送请求
            ajax.send();

            //回调数据
            ajax.onreadystatechange = function(){
                console.log(ajax.responseText);
            }
        }
    </script>

原生ajax的post请求

<script type="text/javascript">
        //post请求
        function test(){
            //创建ajax对象
            var ajax =new XMLHttpRequest();

            //开启
            ajax.open("post","/WebDemo6/ajax");

            //请求头声明
            ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

            //发送请求
            ajax.send("userName=root&password=admin");

            //回调
            ajax.onreadystatechange = function(){
                console.log(ajax.responseText);
            }
        }
    </script>

jquery完成ajax请求

<script type="text/javascript" src = "../js/jquery-3.4.1.js"></script>
    <script type="text/javascript">
        $("#btn").click(function(){
            $.ajax({
                //指定请求方式
                type:"post",
                //请求url地址
                url:"/WebDemo6/ajax",
                //传递到后端的数据
                data:"userName=root&password=admin",
                //回调函数
                success:function(data){
                    console.log("回调数据:"+data);
                }
            })
        })
    </script>

前后端结合(ajax+json)

<script type="text/javascript" src = "../js/jquery-3.4.1.js"></script>
    <script type="text/javascript">
        $("#btn").click(function(){
            $.ajax({  
                //请求方式
                type:"post",
                //请求url:
                url:"/WebDemo6/ajax",
                //规定返回数据格式
                dataType:"json",    
                //数据
                data:{"userName":$("#userName").val(),"password":$("#password").val()},
                //回调
                success:function(data){
                    for(var i = 0;i < data.length;i++){
                        console.log(data[i]);
                    }
                }
            })
        })
    </script>
@WebServlet("/ajax")
public class AjaxServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        String userName = request.getParameter("userName");
//        String password = request.getParameter("password");
//        System.out.println("用户名:"+userName+",密码:"+password);
//        System.out.println("请求成功");

        User user = new User();
        user.setUserName("123123");
        user.setPassword("abcd");
        user.setAge(19);
        user.setSex("man");

        User u2 = new User();
        u2.setUserName("qqqq");
        u2.setPassword("aaaa");
        u2.setAge(20);
        u2.setSex("0");

        User u3 = new User();
        u3.setUserName("wwww");
        u3.setPassword("bbbb");
        u3.setAge(22);
        u3.setSex("00");

        List<User> list = new ArrayList<>();
        list.add(user);
        list.add(u2);
        list.add(u3);

        //将对象转换成json字符串格式
        String json = JSON.toJSONString(list);

        response.getWriter().write(json);
    }
}

文件的上传下载

文件上传

  • 前端代码

    <!DOCTYPE html>
    <html>
      <head>
          <meta charset="utf-8">
          <title></title>
      </head>
      <body>
          <!-- 如果表单中有文件标签,必须声明数据方式 -->
          <form action = "/WebDemo6/upload" method = "post" enctype="multipart/form-data">
              商品名称:<input type="text" id = "prodName" name = "prodName" /><br />
              商品单价:<input type="text" id = "price" name = "price" /><br />
              商品描述:<input type="text" id = "description" name = "description" /><br />
              商品封面:<input type="file" name = "img" id = "img" /><br />
              <input type = "submit" value = "提交" />
          </form>
      </body>
    </html>
    
  • 后端代码

    @WebServlet("/upload")
    @MultipartConfig
    public class UploadServlet extends HttpServlet {
    
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          doPost(request, response);
      }
    
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          try {
              //编码集
              request.setCharacterEncoding("UTF-8");
              response.setCharacterEncoding("UTF-8");
              response.setHeader("Content-type", "text/html;charset=utf-8");
    
              //获取参数
              String prodName = request.getParameter("prodName");
              String price = request.getParameter("price");
              String description = request.getParameter("description");
    
              //处理前端传递过来的流
              Part part = request.getPart("img");
              InputStream in = part.getInputStream();
    
              //获取真实的绝对路径
              String proPath = this.getServletContext().getRealPath("/");
              //替换斜杠
              proPath = proPath.replace("\\","/");
              //去掉最后一个斜杠
              proPath = proPath.substring(0,proPath.length()-1);
              //去掉项目名
              proPath = proPath.substring(0, proPath.lastIndexOf("/"));
              //拼接文件夹名
              String folder = proPath+"/image";
    
              //判断该文件夹是否存在
              File file = new File(folder);
              if(!file.exists()) {
                  file.mkdirs();
              }
    
              //获取文件的后缀
              String temp = part.getHeader("content-disposition");
              String suffix = temp.substring(temp.indexOf("."),temp.length()-1);
              String uuid = UUID.randomUUID().toString();
              String fileName = folder+"/"+uuid+suffix;
    
              //创建文件输出对象
              FileOutputStream fos = new FileOutputStream(new File(fileName));
              //定义数组
              byte[] buf = new byte[1024];
              int len = 0;
              while((len = in.read(buf)) != -1) {
                  fos.write(buf, 0, len);
              }
    
              //关闭资源
              fos.close();
              System.out.println("有图片过来了......");
          }catch(Exception e) {
              e.printStackTrace();
          }    
      }
    }
    

    文件下载

  • 前端代码

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style>
      #btn{
          width:80px;
          height:30px;
          border:1px red solid;
          border-radius:10px;
          float:left;
          cursor: pointer;
          text-align:center;
          line-height:30px;
      }
    </style>
    </head>
    <body>
      <div id = "btn">下载</div>
      <script type="text/javascript" src = "../js/jquery-3.4.1.js"></script>
      <script type="text/javascript">
          //监听单击事件
          $("#btn").click(function(){
              var action = "/WebDemo6/download";
              var form = $("<form>").attr("action",action).attr("method","post").appendTo("body");
              form.submit();
          })
      </script>
    </body>
    </html>
    
  • 后端java代码 ```java @WebServlet(“/download”) public class DownloadServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      doPost(request, response);
    

    } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

      try {
          //获取项目中的文件。
          String fileName = this.getServletContext().getRealPath("/image/cat.jpg");
    
        response.setHeader("content-disposition", "attachment;filename=cat.jpg");
        //创建输入流对象
        InputStream in = new FileInputStream(new File(fileName));
        //获取输出流
        OutputStream out = response.getOutputStream();
        //复制文件的过程
        byte[] buf = new byte[1024];
        int len = 0;
        while((len = in.read(buf)) != -1) {
            out.write(buf, 0, len);
        }
        //关闭资源
        in.close();
    }catch(Exception e) {
        e.printStackTrace();
    }
}

```