JavaWeb笔记Day10------JQuery,AJAX和JSON

JQuery

概念

jQuery 是一个快速、小巧且功能丰富的 JavaScript 库。它使HTML文档遍历和操作,事件处理,动画和Ajax等功能变得更加简单,它具有易于使用的API,可跨多种浏览器运行。凭借多功能性和可扩展性的结合,jQuery改变了数百万人编写JavaScript的方式。

使用方法

<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>

JQuery对象和JS对象的区别与转换

  1. jQuery对象在操作时,更加方便

  2. jQuery对象和js对象方法不通用的

  3. 两者相互转换

    • jq--->js:jq对象[索引] 或者 jq对象.get(索引)

    • js--->jq:$(js对象)

  4. 示例

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
    </head>
    <body>
    <div id="div1">div1...</div>
    <div id="div2">div2...</div>
    <script>
    //通过js方式来获取名称叫做div的所有html元素
    let divs=document.getElementsByTagName("div");
    //可以当做数组使用
    alert(divs.length);
    //对divs中所有的div让其标签体内容变成aaa
    for (let i=0;i<divs.length;i++){
    // divs[i].innerHTML="aaa";
    $(divs[i]).html("ccc");
    }
    //2.通过jQuery方式获取名称叫做div的所有HTML元素
    let $divs = $("div");
    //也可以当做数组使用
    alert($divs.length);
    //对divs中所有的div让其标签体内容变成bbb
    // $divs.html("bbb");
    $divs[0].innerHTML="ddd";
    $divs.get(1).innerHTML="eee";
    /**
    * 1. jQuery对象在操作时,更加方便
    * 2. jQuery对象和js对象方法不通用的
    * 3. 两者相互转换
    * - jq--->js:jq对象[索引] 或者 jq对象.get(索引)
    * - js--->jq:$(js对象)
    */
    </script>
    </body>
    </html>

选择器

概念

筛选具有相似特征的元素(标签)

基本语法学习

  1. 事件绑定

    //给b1按钮添加单击事件
    //1.获取b1按钮
    $("#b1").click(function () {
    alert("aaa");
    });
  2. 入口函数

  3. 样式控制

代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
// window.onload=function () {
// $("#b1").click(function () {
// alert("aaa");
// });
// }
//jQuery入口函数(dom文档加载完成之后执行该函数中的代码)
$(function () {
$("#b1").click(function () {
alert("aaa");
});
});
$(function () {
// $("#div1").css("background-color","red");
$("#div1").css("backgroundColor","red");
})
/**
* window.onload和$(function)区别
* window.onload只能定义一次,如果定义多次,后边的会将前面的覆盖掉
* $(function)可以定义多次的
*/
</script>
</head>
<body>
<div id="div1">div1...</div>
<div id="div2">div2...</div>
<input type="button" value="按钮" id="b1">
<script>
// //给b1按钮添加单击事件
// //1.获取b1按钮
// $("#b1").click(function () {
// alert("aaa");
// });
</script>
</body>
</html>

分类

基本选择器

  1. 标签选择器(元素选择器)

    • 语法: $("html标签名")

      获得所有匹配标签名称的元素

  2. id选择器

    • 语法:$("#id的属性值")

      获得与指定id属性值匹配的元素

  3. 类选择器

    • 语法:$(".class的属性值")

      获得与指定的class属性值匹配的元素

  4. 并集选择器:

    • 语法:$("选择器1,选择器2....")

      获取多个选择器选中的所有元素

  • 案例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>基本选择器</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script src="../js/jquery-3.3.1.min.js"></script>
    <style type="text/css">
    div,span{
    width: 180px;
    height: 180px;
    margin: 20px;
    background: #9999CC;
    border: #000 1px solid;
    float:left;
    font-size: 17px;
    font-family:Roman;
    }
    div .mini{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    div .mini01{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    </style>
    <script type="text/javascript">
    $(function () {
    // <input type="button" value="改变 id 为 one 的元素的背景色为 红色" id="b1"/>
    $("#b1").click(function () {
    $("#one").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变元素名为 <div> 的所有元素的背景色为 红色" id="b2"/>
    $("#b2").click(function () {
    $("div").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变 class 为 mini 的所有元素的背景色为 红色" id="b3"/>
    $("#b3").click(function () {
    $(".mini").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变所有的<span>元素和 id 为 two 的元素的背景色为红色" id="b4"/>
    $("#b4").click(function () {
    $("span,#two").css("backgroundColor","pink");
    });
    });
    </script>
    </head>
    <body>
    <input type="button" value="保存" class="mini" name="ok" class="mini" />
    <input type="button" value="改变 id 为 one 的元素的背景色为 红色" id="b1"/>
    <input type="button" value=" 改变元素名为 <div> 的所有元素的背景色为 红色" id="b2"/>
    <input type="button" value=" 改变 class 为 mini 的所有元素的背景色为 红色" id="b3"/>
    <input type="button" value=" 改变所有的<span>元素和 id 为 two 的元素的背景色为红色" id="b4"/>
    <h1>有一种奇迹叫坚持</h1>
    <h2>自信源于努力</h2>
    <div id="one">
    id为one
    </div>
    <div id="two" class="mini" >
    id为two class是 mini
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini" >class是 mini</div>
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini01" >class是 mini01</div>
    <div class="mini" >class是 mini</div>
    </div>
    <span class="spanone">class为spanone的span元素</span>
    <span class="mini">class为mini的span元素</span>
    <input type="text" value="zhang" id="username" name="username">
    </body>
    </html>

层级选择器

  1. 后代选择器

    • 语法:$("A B ")

      选择A元素内部的所有B元素

  2. 子选择器

    • 语法:$("A > B")

      选择A元素内部的所有B子元素

  • 案例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>层次选择器</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script src="../js/jquery-3.3.1.min.js"></script>
    <style type="text/css">
    div,span{
    width: 180px;
    height: 180px;
    margin: 20px;
    background: #9999CC;
    border: #000 1px solid;
    float:left;
    font-size: 17px;
    font-family:Roman;
    }
    div .mini{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    div .mini01{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    </style>
    <script type="text/javascript">
    $(function () {
    // <input type="button" value=" 改变 <body> 内所有 <div> 的背景色为红色" id="b1"/>
    $("#b1").click(function () {
    $("body div").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变 <body> 内子 <div> 的背景色为 红色" id="b2"/>
    $("#b2").click(function () {
    $("body > div").css("backgroundColor","pink");
    });
    });
    </script>
    </head>
    <body>
    <input type="button" value="保存" class="mini" name="ok" class="mini" />
    <input type="button" value=" 改变 <body> 内所有 <div> 的背景色为红色" id="b1"/>
    <input type="button" value=" 改变 <body> 内子 <div> 的背景色为 红色" id="b2"/>
    <h1>有一种奇迹叫坚持</h1>
    <h2>自信源于努力</h2>
    <div id="one">
    id为one
    </div>
    <div id="two" class="mini" >
    id为two class是 mini
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini" >class是 mini</div>
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one">
    class是 one
    <div class="mini01" >class是 mini01</div>
    <div class="mini" >class是 mini</div>
    </div>
    <span class="spanone"> span
    </span>
    </body>
    </html>

属性选择器

  1. 属性名称选择器

    • 语法:$("A[属性名]")

      包含指定属性的选择器

  2. 属性选择器

    • 语法:$("A[属性名='值']")

      包含指定属性等于指定值的选择器

  3. 复合属性选择器

    • 语法:$("A[属性名='值'][]...")

      包含多个属性条件的选择器

  • 案例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>属性过滤选择器</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script src="../js/jquery-3.3.1.min.js"></script>
    <style type="text/css">
    div,span{
    width: 180px;
    height: 180px;
    margin: 20px;
    background: #9999CC;
    border: #000 1px solid;
    float:left;
    font-size: 17px;
    font-family:Roman;
    }
    div .mini{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    div .mini01{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    div.visible{
    display:none;
    }
    </style>
    <script type="text/javascript">
    $(function () {
    // <input type="button" value=" 含有属性title 的div元素背景色为红色" id="b1"/>
    $("#b1").click(function () {
    $("div[title]").css("backgroundColor","pink");
    });
    // <input type="button" value=" 属性title值等于test的div元素背景色为红色" id="b2"/>
    $("#b2").click(function () {
    $("div[title='test']").css("backgroundColor","pink");
    });
    // <input type="button" value=" 属性title值不等于test的div元素(没有属性title的也将被选中)背景色为红色" id="b3"/>
    $("#b3").click(function () {
    $("div[title!='test']").css("backgroundColor","pink");
    });
    // <input type="button" value=" 属性title值 以te开始 的div元素背景色为红色" id="b4"/>
    $("#b4").click(function () {
    $("div[title^='te']").css("backgroundColor","pink");
    });
    // <input type="button" value=" 属性title值 以est结束 的div元素背景色为红色" id="b5"/>
    $("#b5").click(function () {
    $("div[title$='est']").css("backgroundColor","pink");
    });
    // <input type="button" value="属性title值 含有es的div元素背景色为红色" id="b6"/>
    $("#b6").click(function () {
    $("div[title*='es']").css("backgroundColor","pink");
    });
    // <input type="button" value="选取有属性id的div元素,然后在结果中选取属性title值含有“es”的 div 元素背景色为红色" id="b7"/>
    $("#b7").click(function () {
    $("div[id][title*='es']").css("backgroundColor","pink");
    });
    });
    </script>
    </head>
    <body>
    <input type="button" value="保存" class="mini" name="ok" class="mini" />
    <input type="button" value=" 含有属性title 的div元素背景色为红色" id="b1"/>
    <input type="button" value=" 属性title值等于test的div元素背景色为红色" id="b2"/>
    <input type="button" value=" 属性title值不等于test的div元素(没有属性title的也将被选中)背景色为红色" id="b3"/>
    <input type="button" value=" 属性title值 以te开始 的div元素背景色为红色" id="b4"/>
    <input type="button" value=" 属性title值 以est结束 的div元素背景色为红色" id="b5"/>
    <input type="button" value="属性title值 含有es的div元素背景色为红色" id="b6"/>
    <input type="button" value="选取有属性id的div元素,然后在结果中选取属性title值含有“es”的 div 元素背景色为红色" id="b7"/>
    <div id="one">
    id为one div
    </div>
    <div id="two" class="mini" title="test">
    id为two class是 mini div title="test"
    <div class="mini" >class是 mini</div>
    </div>
    <div class="visible" >
    class是 one
    <div class="mini" >class是 mini</div>
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" title="test02">
    class是 one title="test02"
    <div class="mini01" >class是 mini01</div>
    <div class="mini" style="margin-top:0px;">class是 mini</div>
    </div>
    <div class="visible" >
    这是隐藏的
    </div>
    <div class="one">
    </div>
    <div id="mover" >
    动画
    </div>
    <input type="text" value="zhang" id="username" name="username">
    </body>
    </html>

过滤选择器

  1. 首元素选择器

    • 语法::first

      获得选择的元素中的第一个元素

  2. 尾元素选择器

    • 语法::last

      获得选择的元素中的最后一个元素

  3. 非元素选择器

    • 语法::not(selector)

      不包括指定内容的元素

  4. 偶数选择器

    • 语法::even

      偶数,从 0 开始计数

  5. 奇数选择器

    • 语法::odd

      奇数,从 0 开始计数

  6. 等于索引选择器

    • 语法::eq(index)

      指定索引元素

  7. 大于索引选择器

    • 语法::gt(index)

      大于指定索引元素

  8. 小于索引选择器

    • 语法::lt(index)

      小于指定索引元素

  9. 标题选择器

    • 语法::header

      获得标题(h1~h6)元素,固定写法

  • 案例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>基本过滤选择器</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script src="../js/jquery-3.3.1.min.js"></script>
    <style type="text/css">
    div,span{
    width: 180px;
    height: 180px;
    margin: 20px;
    background: #9999CC;
    border: #000 1px solid;
    float:left;
    font-size: 17px;
    font-family:Roman;
    }
    div .mini{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    div .mini01{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    </style>
    <script type="text/javascript">
    $(function () {
    // <input type="button" value=" 改变第一个 div 元素的背景色为 红色" id="b1"/>
    $("#b1").click(function () {
    $("div:first").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变最后一个 div 元素的背景色为 红色" id="b2"/>
    $("#b2").click(function () {
    $("div:last").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变class不为 one 的所有 div 元素的背景色为 红色" id="b3"/>
    $("#b3").click(function () {
    $("div:not(.one)").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变索引值为偶数的 div 元素的背景色为 红色" id="b4"/>
    $("#b4").click(function () {
    $("div:even").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变索引值为奇数的 div 元素的背景色为 红色" id="b5"/>
    $("#b5").click(function () {
    $("div:odd").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变索引值为大于 3 的 div 元素的背景色为 红色" id="b6"/>
    $("#b6").click(function () {
    $("div:gt(3)").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变索引值为等于 3 的 div 元素的背景色为 红色" id="b7"/>
    $("#b7").click(function () {
    $("div:eq(3)").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变索引值为小于 3 的 div 元素的背景色为 红色" id="b8"/>
    $("#b8").click(function () {
    $("div:lt(3)").css("backgroundColor","pink");
    });
    // <input type="button" value=" 改变所有的标题元素的背景色为 红色" id="b9"/>
    $("#b9").click(function () {
    $(":header").css("backgroundColor","pink");
    });
    });
    </script>
    </head>
    <body>
    <input type="button" value="保存" class="mini" name="ok" class="mini" />
    <input type="button" value=" 改变第一个 div 元素的背景色为 红色" id="b1"/>
    <input type="button" value=" 改变最后一个 div 元素的背景色为 红色" id="b2"/>
    <input type="button" value=" 改变class不为 one 的所有 div 元素的背景色为 红色" id="b3"/>
    <input type="button" value=" 改变索引值为偶数的 div 元素的背景色为 红色" id="b4"/>
    <input type="button" value=" 改变索引值为奇数的 div 元素的背景色为 红色" id="b5"/>
    <input type="button" value=" 改变索引值为大于 3 的 div 元素的背景色为 红色" id="b6"/>
    <input type="button" value=" 改变索引值为等于 3 的 div 元素的背景色为 红色" id="b7"/>
    <input type="button" value=" 改变索引值为小于 3 的 div 元素的背景色为 红色" id="b8"/>
    <input type="button" value=" 改变所有的标题元素的背景色为 红色" id="b9"/>
    <h1>有一种奇迹叫坚持</h1>
    <h2>自信源于努力</h2>
    <div id="one">
    id为one
    </div>
    <div id="two" class="mini" >
    id为two class是 mini
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini" >class是 mini</div>
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini01" >class是 mini01</div>
    <div class="mini" >class是 mini</div>
    </div>
    </body>
    </html>

表单过滤选择器

  1. 可用元素选择器

    • 语法::enabled

      获得可用元素

  2. 不可用元素选择器

    • 语法::disabled

      获得不可用元素

  3. 选中选择器

    • 语法::checked

      获得单选/复选框选中的元素

  4. 选中选择器

    • 语法::selected

      获得下拉框选中的元素

  • 案例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>表单属性过滤选择器</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script src="../js/jquery-3.3.1.min.js"></script>
    <style type="text/css">
    div,span{
    width: 180px;
    height: 180px;
    margin: 20px;
    background: #9999CC;
    border: #000 1px solid;
    float:left;
    font-size: 17px;
    font-family:Roman;
    }
    div .mini{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    div .mini01{
    width: 50px;
    height: 50px;
    background: #CC66FF;
    border: #000 1px solid;
    font-size: 12px;
    font-family:Roman;
    }
    #job{
    margin: 20px;
    }
    #edu{
    margin-top:-70px;
    }
    </style>
    <script type="text/javascript">
    $(function () {
    // <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内可用 <input> 元素的值" id="b1"/>
    $("#b1").click(function () {
    $("input[type='text']:enabled").val("aaa");
    });
    // <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内不可用 <input> 元素的值" id="b2"/>
    $("#b2").click(function () {
    $("input[type='text']:disabled").val("aaa");
    });
    // <input type="button" value=" 利用 jQuery 对象的 length 属性获取复选框选中的个数" id="b3"/>
    $("#b3").click(function () {
    alert($("input[type='checkbox']:checked").length);
    });
    // <input type="button" value=" 利用 jQuery 对象的 length 属性获取下拉框选中的个数" id="b4"/>
    $("#b4").click(function () {
    alert($("#job > option:selected").length);
    });
    });
    </script>
    </head>
    <body>
    <input type="button" value="保存" class="mini" name="ok" class="mini" />
    <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内可用 <input> 元素的值" id="b1"/>
    <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内不可用 <input> 元素的值" id="b2"/>
    <input type="button" value=" 利用 jQuery 对象的 length 属性获取复选框选中的个数" id="b3"/>
    <input type="button" value=" 利用 jQuery 对象的 length 属性获取下拉框选中的个数" id="b4"/>
    <br><br>
    <input type="text" value="不可用值1" disabled="disabled">
    <input type="text" value="可用值1" >
    <input type="text" value="不可用值2" disabled="disabled">
    <input type="text" value="可用值2" >
    <br><br>
    <input type="checkbox" name="items" value="美容" >美容
    <input type="checkbox" name="items" value="IT" >IT
    <input type="checkbox" name="items" value="金融" >金融
    <input type="checkbox" name="items" value="管理" >管理
    <br><br>
    <input type="radio" name="sex" value="男" >
    <input type="radio" name="sex" value="女" >
    <br><br>
    <select name="job" id="job" multiple="multiple" size=4>
    <option>程序员</option>
    <option>中级程序员</option>
    <option>高级程序员</option>
    <option>系统分析师</option>
    </select>
    <select name="edu" id="edu">
    <option>本科</option>
    <option>博士</option>
    <option>硕士</option>
    <option>大专</option>
    </select>
    <br/>
    <div id="two" class="mini" >
    id为two class是 mini div
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini" >class是 mini</div>
    <div class="mini" >class是 mini</div>
    </div>
    <div class="one" >
    class是 one
    <div class="mini01" >class是 mini01</div>
    <div class="mini" >class是 mini</div>
    </div>
    </body>
    </html>

DOM操作

内容操作

  1. html():获取/设置元素的标签体内容 <a><font>内容</font></a> --> <font>内容</font>
  2. text():获取/设置元素的标签体纯文本内容 <a><font>内容</font></a> --> 内容
  3. val():获取/设置元素的value属性值

属性操作

  1. 通用属性操作

    1. attr():获取/设置元素的属性
    2. removeAttr():删除属性
    3. prop():获取/设置元素的属性
    4. removeProp():删除属性
    • 注:attr和prop区别?
      1. 如果操作的是元素的固有属性,则建议使用prop
      2. 如果操作的是元素自定义的属性,则建议使用attr
  2. 对class属性操作

  3. addClass():添加class属性值

  4. removeClass():删除class属性值

  5. toggleClass():切换class属性

    • toggleClass("one"):
      • 判断如果元素对象上存在class="one",则将属性值one删除掉。 如果元素对象上不存在class="one",则添加
  6. css():

CRUD操作:

  1. append():父元素将子元素追加到末尾
    • 对象1.append(对象2): 将对象2添加到对象1元素内部,并且在末尾
  2. prepend():父元素将子元素追加到开头
    • 对象1.prepend(对象2):将对象2添加到对象1元素内部,并且在开头
  3. appendTo():
    • 对象1.appendTo(对象2):将对象1添加到对象2内部,并且在末尾
  4. prependTo():
    • 对象1.prependTo(对象2):将对象1添加到对象2内部,并且在开头
  5. after():添加元素到元素后边
    • 对象1.after(对象2): 将对象2添加到对象1后边。对象1和对象2是兄弟关系
  6. before():添加元素到元素前边
    • 对象1.before(对象2): 将对象2添加到对象1前边。对象1和对象2是兄弟关系
  7. insertAfter()
    • 对象1.insertAfter(对象2):将对象2添加到对象1后边。对象1和对象2是兄弟关系
  8. insertBefore()
    • 对象1.insertBefore(对象2): 将对象2添加到对象1前边。对象1和对象2是兄弟关系
  9. remove():移除元素
    • 对象.remove():将对象删除掉
  10. empty():清空元素的所有后代元素。
    • 对象.empty():将对象的后代元素全部清空,但是保留当前对象以及其属性节点

案例

隔行换色

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
//需求:将数据行的奇数行背景色设置为 pink,偶数行背景色设置为 yellow
$(function (){
//1. 获取数据行的奇数行的tr,设置背景色为pink
$("tr:gt(1):odd").css("backgroundColor","pink");
//2. 获取数据行的偶数行的tr,设置背景色为yellow
$("tr:gt(1):even").css("backgroundColor","yellow");
});
</script>
</head>
<body>
<table id="tab1" border="1" width="800" align="center" >
<tr>
<td colspan="5"><input type="button" value="删除"></td>
</tr>
<tr style="background-color: #999999;">
<th><input type="checkbox"></th>
<th>分类ID</th>
<th>分类名称</th>
<th>分类描述</th>
<th>操作</th>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>1</td>
<td>手机数码</td>
<td>手机数码类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>2</td>
<td>电脑办公</td>
<td>电脑办公类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>3</td>
<td>鞋靴箱包</td>
<td>鞋靴箱包类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>4</td>
<td>家居饰品</td>
<td>家居饰品类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
</table>
</body>
</html>

全选和全不选

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
//分析:需要保证下边的选中状态和第一个复选框的选中状态一致即可
function selectAll(obj){
//获取下边的复选框
$(".itemSelect").prop("checked",obj.checked);
}
</script>
</head>
<body>
<table id="tab1" border="1" width="800" align="center" >
<tr>
<td colspan="5"><input type="button" value="删除"></td>
</tr>
<tr>
<th><input type="checkbox" onclick="selectAll(this)" ></th>
<th>分类ID</th>
<th>分类名称</th>
<th>分类描述</th>
<th>操作</th>
</tr>
<tr>
<td><input type="checkbox" class="itemSelect"></td>
<td>1</td>
<td>手机数码</td>
<td>手机数码类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
<tr>
<td><input type="checkbox" class="itemSelect"></td>
<td>2</td>
<td>电脑办公</td>
<td>电脑办公类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
<tr>
<td><input type="checkbox" class="itemSelect"></td>
<td>3</td>
<td>鞋靴箱包</td>
<td>鞋靴箱包类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
<tr>
<td><input type="checkbox" class="itemSelect"></td>
<td>4</td>
<td>家居饰品</td>
<td>家居饰品类商品</td>
<td><a href="">修改</a>|<a href="">删除</a></td>
</tr>
</table>
</body>
</html>

QQ表情选择

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>QQ表情选择</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<style type="text/css">
*{margin: 0;padding: 0;list-style: none;}
.emoji{margin:50px;}
ul{overflow: hidden;}
li{float: left;width: 48px;height: 48px;cursor: pointer;}
.emoji img{ cursor: pointer; }
</style>
<script>
//需求:点击qq表情,将其追加到发言框中
$(function () {
//1. 给img图片添加onclick事件
$("ul img").click(function () {
//2. 追加到p标签中即可
$(".word").append($(this).clone());
});
});
</script>
</head>
<body>
<div class="emoji">
<ul>
<li><img src="img/01.gif" height="22" width="22" alt="" /></li>
<li><img src="img/02.gif" height="22" width="22" alt="" /></li>
<li><img src="img/03.gif" height="22" width="22" alt="" /></li>
<li><img src="img/04.gif" height="22" width="22" alt="" /></li>
<li><img src="img/05.gif" height="22" width="22" alt="" /></li>
<li><img src="img/06.gif" height="22" width="22" alt="" /></li>
<li><img src="img/07.gif" height="22" width="22" alt="" /></li>
<li><img src="img/08.gif" height="22" width="22" alt="" /></li>
<li><img src="img/09.gif" height="22" width="22" alt="" /></li>
<li><img src="img/10.gif" height="22" width="22" alt="" /></li>
<li><img src="img/11.gif" height="22" width="22" alt="" /></li>
<li><img src="img/12.gif" height="22" width="22" alt="" /></li>
</ul>
<p class="word">
<strong>请发言:</strong>
<img src="img/12.gif" height="22" width="22" alt="" />
</p>
</div>
</body>
</html>

左右移动

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<style>
#leftName , #btn,#rightName{
float: left;
width: 100px;
height: 300px;
}
#toRight,#toLeft{
margin-top:100px ;
margin-left:30px;
width: 50px;
}
.border{
height: 500px;
padding: 100px;
}
</style>
<script>
//需求:实现下拉列表选择条目左右选择功能
$(function () {
//toRight
$("#toRight").click(function () {
//获取右边的下拉列表对象,append(左边下拉列表选中的option)
$("#rightName").append($("#leftName>option:selected"));
});
//toLeft
$("#toLeft").click(function () {
//appendTo 获取右边选中的option,将其移动到左边下拉列表中
$("#rightName>option:selected").appendTo($("#leftName"));
});
});
</script>
</head>
<body>
<div class="border">
<select id="leftName" multiple="multiple">
<option>张三</option>
<option>李四</option>
<option>王五</option>
<option>赵六</option>
</select>
<div id="btn">
<input type="button" id="toRight" value="-->"><br>
<input type="button" id="toLeft" value="<--">
</div>
<select id="rightName" multiple="multiple">
<option>钱七</option>
</select>
</div>
</body>
</html>

动画

三种方式显示和隐藏元素

默认显示和隐藏方式
  1. show([speed,[easing],[fn]])

    参数:

    1. speed:动画的速度。三个预定义的值("slow","normal", "fast")或表示动画时长的毫秒数值(如:1000)

    2. easing:用来指定切换效果,默认是"swing",可用参数"linear"

      • swing:动画执行时效果是 先慢,中间快,最后又慢

        • linear:动画执行时速度是匀速的
    3. fn:在动画完成时执行的函数,每个元素执行一次。

  2. hide([speed,[easing],[fn]])

  3. toggle([speed],[easing],[fn])

滑动显示和隐藏方式
  1. slideDown([speed],[easing],[fn])
  2. slideUp([speed,[easing],[fn]])
  3. slideToggle([speed],[easing],[fn])
淡入淡出显示和隐藏方式
  1. fadeIn([speed],[easing],[fn])
  2. fadeOut([speed],[easing],[fn])
  3. fadeToggle([speed,[easing],[fn]])
案例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
//切换显示和隐藏---淡入淡出
function toggleFn() {
$("#showDiv").fadeToggle("slow","swing",function () {
alert("切换了");
});
}
//默认显示div
function showFn() {
$("#showDiv").show("normal","swing",function (){
alert("显示了");
});
}
//滑动隐藏div--5s
function hideFn() {
$("#showDiv").slideUp(5000);
}
</script>
</head>
<body>
<input type="button" value="点击按钮隐藏div" onclick="hideFn()">
<input type="button" value="点击按钮显示div" onclick="showFn()">
<input type="button" value="点击按钮切换div显示和隐藏" onclick="toggleFn()">
<div id="showDiv" style="width:300px;height:300px;background:pink">
div显示和隐藏
</div>
</body>
</html>

遍历

js的遍历方式

for(初始化值;循环结束条件;步长)

jq的遍历方式

  1. jq对象.each(callback)

    1. 语法:

      jquery对象.each(function(index,element){});

      • index:就是元素在集合中的索引

      • element:就是集合中的每一个元素对象

      • this:集合中的每一个元素对象

    2. 回调函数返回值:

      • true:如果当前function返回为false,则结束循环(break)。
      • false:如果当前function返回为true,则结束本次循环,继续下次循环(continue)
  2. $.each(object, [callback])

  3. for..of: jquery 3.0 版本之后提供的方式
    for(元素对象 of 容器对象)

案例

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function () {
let cities=$("#city li");
// for (let i=0;i<cities.length;i++){
// alert(cities[i].innerHTML);
// }
// cities.each(function (index,element) {
// //1. 获取li第一种方式 this
// // alert(this.innerHTML);
// //2. 方式2: 在回调函数中定义参数 index(索引) element(元素对象)
// if ("上海"==$(element).html()){
// //如果当前function返回为false,结束循环。(break)
// // 返回为true,继续下次循环 (continue)
// return true;
// }
// alert(index+":"+$(element).html());
// });
// $.each(cities,function () {
// alert(this.innerHTML);
// });
//jquery3.x
for (li of cities){
alert(li.innerHTML);
}
});
</script>
</head>
<body>
<ul id="city">
<li>北京</li>
<li>上海</li>
<li>天津</li>
<li>重庆</li>
</ul>
</body>
</html>

事件绑定

jquery标准的绑定方式

jq对象.事件方法(回调函数);

  • 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为。
    • 表单对象.submit();//让表单提交

on绑定事件/off解除绑定

  1. jq对象.on("事件名称",回调函数)
  2. jq对象.off("事件名称")
    • 如果off方法不传递任何参数,则将组件上的所有事件全部解绑

事件切换:toggle

jq对象.toggle(fn1,fn2...)

  • 当单击jq对象对应的组件后,会执行fn1.第二次点击会执行fn2.....

注意:1.9版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。

  • <script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

案例

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
<script type="text/javascript">
$(function () {
// //获取name对象,绑定click事件
// $("#name").click(function (){
// alert("我被点击了");
// });
//
// //给name绑定鼠标移动到元素之上事件。绑定鼠标移出事件
// $("#name").mouseover(function () {
// alert("鼠标来了");
// });
//
// $("#name").mouseout(function () {
// alert("鼠标走了");
// });
// //简化操作,链式编程
// $("#name").click(function () {
// alert("我被点击了");
// }).mouseover(function () {
// alert("鼠标来了");
// }).mouseout(function () {
// alert("鼠标走了");
// });
// alert("555");
// //让文本输入框获得焦点
// $("#name").focus();
//表单对象.submit();//让表单提交
//1.使用on给按钮绑定单击事件 click
$("#btn").on("click",function () {
alert("点击");
});
//2. 使用off解除btn按钮的单击事件
$("#btn2").click(function () {
// $("#btn").off("click");
$("#btn").off();//将组件上的所有事件全部解绑
});
//获取按钮,调用toggle方法
$("#btn3").toggle(function () {
//改变div背景色backgroundColor 颜色为 green
$("#myDiv").css("backgroundColor","green");
},function () {
//改变div背景色backgroundColor 颜色为 pink
$("#myDiv").css("backgroundColor","pink");
});
});
</script>
</head>
<body>
<input id="name" type="text" value="绑定点击事件">
<input id="btn" type="button" value="使用on绑定点击事件">
<input id="btn2" type="button" value="使用off解绑点击事件">
<input id="btn3" type="button" value="事件切换">
<div id="myDiv" style="width:300px;height:300px;background:pink">
点击按钮变成绿色,再次点击红色
</div>
</body>
</html>

案例2

广告显示和隐藏

需求
  1. 当页面加载完,3s后。自动显示广告

  2. 广告显示5s后,自动消失

分析
  1. 使用定时器来完成。setTimeout(执行一次定时器)
  2. 分析发现jQuery的显示和隐藏动画效果其实就是控制display
  3. 使用 show/hide方法来完成广告的显示
实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>广告的自动显示与隐藏</title>
<style>
#content{width:100%;height:500px;background:#999}
</style>
<!--引入jquery-->
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
//入口函数,在页面加载完成之后,定义定时器,调用这两个方法
$(function () {
//定义定时器,调用这俩个方法
setTimeout(adShow,3000);
//第一个方法等待了3s,显示5s,所以广告消失时间是3s+5s=8s
setTimeout(adHide,8000);
});
//显示广告
function adShow() {
$("#ad").show("slow");
}
//隐藏广告
function adHide(){
$("#ad").hide("slow");
}
</script>
</head>
<body>
<!-- 整体的DIV -->
<div>
<!-- 广告DIV -->
<div id="ad" style="display: none;">
<img style="width:100%" src="../img/adv.jpg" />
</div>
<!-- 下方正文部分 -->
<div id="content">
正文部分
</div>
</div>
</body>
</html>

抽奖

分析
  1. 给开始按钮绑定单击事件
    1. 定义循环定时器
    2. 切换小相框的src属性
      1. 定义数组,存放图片资源路径
      2. 生成随机数,数组索引
  2. 给结束按钮绑定单击事件
    1. 停止计时器
    2. 给大相框设置src属性
实现
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery案例之抽奖</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
let imgs = [
"../img/man00.jpg",
"../img/man01.jpg",
"../img/man02.jpg",
"../img/man03.jpg",
"../img/man04.jpg",
"../img/man05.jpg",
"../img/man06.jpg"
];
let startId,index;
$(function () {
//开始按钮
$("#startID").click(function () {
//1.1 定义循环定时器 20ms执行一次
startId = setInterval(function () {
//1.2生成随机角标0-6
index = Math.floor(Math.random() * 7);
//处理按钮是否可用
$("#startID").prop("disabled",true);
$("#stopID").prop("disabled",false);
//1.3设置小相框的src属性
$("#img1ID").prop("src", imgs[index]);
}, 20);
});
//结束按钮
$("#stopID").click(function () {
//停止计时器
clearInterval(startId);
//处理按钮是否可用
$("#startID").prop("disabled",false);
$("#stopID").prop("disabled",true);
//给大相框设置src属性
$("#img2ID").prop("src",imgs[index]);
});
});
</script>
</head>
<body>
<!-- 小像框 -->
<div style="border-style:dotted;width:160px;height:100px">
<img id="img1ID" src="../img/man00.jpg" style="width:160px;height:100px"/>
</div>
<!-- 大像框 -->
<div
style="border-style:double;width:800px;height:500px;position:absolute;left:500px;top:10px">
<img id="img2ID" src="../img/man00.jpg" width="800px" height="500px"/>
</div>
<!-- 开始按钮 -->
<input
id="startID"
type="button"
value="点击开始"
style="width:150px;height:150px;font-size:22px"
onclick="imgStart()">
<!-- 停止按钮 -->
<input
id="stopID"
type="button"
value="点击停止"
style="width:150px;height:150px;font-size:22px"
onclick="imgStop()">
</body>
</html>

插件

功能

增强JQuery的功能

实现方式

//增强通过Jquery获取的对象的功能 $("#id")
$.fn.extend(object)
//增强JQeury对象自身的功能 $/jQuery
$.extend(object)

案例

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>01-jQuery对象进行方法扩展</title>
<script src="../js/jquery-3.3.1.min.js" type="text/javascript" charset="utf-8"></script>
<!--
<script type="text/javascript">
//使用jquery插件 给jq对象添加2个方法 check()选中所有复选框,uncheck()取消选中所有复选框
//1.定义jqeury的对象插件
$.fn.extend({
//定义了一个check()方法。所有的jq对象都可以调用该方法
check:function () {
//让复选框选中
//this:调用该方法的jq对象
this.prop("checked",true);
},
uncheck:function () {
//让复选框不选中
this.prop("checked",false);
}
});
$(function () {
// 获取按钮
//$("#btn-check").check();
//复选框对象.check();
$("#btn-check").click(function () {
//获取复选框对象
$("input[type='checkbox']").check();
});
$("#btn-uncheck").click(function () {
//获取复选框对象
$("input[type='checkbox']").uncheck();
});
});
</script>
-->
<script type="text/javascript">
//对全局方法扩展2个方法,扩展min方法:求2个值的最小值;扩展max方法:求2个值最大值
$.extend({
max:function (a,b) {
//返回两数中的较大值
return a >= b ? a:b;
},
min:function (a,b) {
//返回两数中的较小值
return a <= b ? a:b;
}
});
//调用全局方法
var max = $.max(4,3);
//alert(max);
var min = $.min(1,2);
alert(min);
</script>
</head>
<body>
<input id="btn-check" type="button" value="点击选中复选框" onclick="checkFn()">
<input id="btn-uncheck" type="button" value="点击取消复选框选中" onclick="uncheckFn()">
<br/>
<input type="checkbox" value="football">足球
<input type="checkbox" value="basketball">篮球
<input type="checkbox" value="volleyball">排球
</body>
</html>

AJAX

概念

  • Asynchronous Javascript And XML,异步的JavaScript和XML
  • Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

异步和同步

客户端和服务器端相互通信的基础上

  • 异步:客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。

  • 同步:客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作。

image

作用

提升用户的体验

实现方式

原生JS实现方式

ajaxServlet
package learn;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "ajaxServlet", value = "/ajaxServlet")
public class ajaxServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取请求参数
String username = request.getParameter("username");
//处理业务逻辑
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//2. 打印username
System.out.println(username);
//3. 响应
response.getWriter().write("success"+username);
}
}
JS实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<script>
//定义方法
function fun() {
//发送异步请求
//1. 创建核心对象
let xmlHttp;
if (window.XMLHttpRequest){
//高版本浏览器
xmlHttp=new XMLHttpRequest();
}
else {
//低版本浏览器IE6,IE5
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//2. 建立连接
/**
* 参数:
* 1. 请求方式: GET,POST
* - get方式: 请求参数在URL后边拼接。send方法为空参
* - post方式,请求参数在send方法中定义
* 2. 请求的URL:
* 3.同步或者异步请求: true(异步) 或者 false(同步)
*/
xmlHttp.open("GET","../ajaxServlet?username=tom",true);
//3.发送请求
xmlHttp.send();
//4. 接收并处理来自服务器响应的结果
//获取方式:xmlHttp.responseText
//什么时候获取: 当服务器响应成功后再获取
//当xmlHttp对象的就绪状态改变时,就会触发onreadystatechange事件
xmlHttp.onreadystatechange=function () {
//判断就绪状态是否为4,判断status响应状态码是否为200
if (xmlHttp.readyState==4 && xmlHttp.status==200){
//获取响应的结果
let result=xmlHttp.responseText;
//将结果显示在页面上
//document.getElementById("result").innerHTML=result;
alert(result);
}
}
}
</script>
<body>
<input type="button" onclick="fun()" value="发送异步请求">
<input type="text" name="" id="">
</body>
</html>

JQuery实现方式

方法
  1. $.ajax()

    • 语法:

      $.ajax({键值对});
    • 示例:

      //定义方法
      function fun() {
      //使用$.ajax()发送异步请求
      $.ajax({
      url: "../ajaxServlet",//请求路径
      type: "POST",//请求方式
      // data:"username=zhangsan&age=24",//请求参数
      data:{
      "username":"zhangsan",
      "age":24
      },
      success:function (data) {
      alert(data);
      },//响应成功后的回调函数
      error:function () {
      alert("请求失败");
      },//表示请求响应出现错误后,执行的回调函数
      dateType:"json",//设置接收到的响应数据的格式
      });
      }
  2. $.get():发送get请求

    • 语法:

      $.get(url,[date],[callback],[type]);
      /**
      url:请求路径
      data:请求参数
      callback:回调函数
      type:响应结果的类型
      */
    • 示例:

      //定义方法
      function fun() {
      $.get("../ajaxServlet",{
      username:"张三",
      },function (data) {
      alert(data);
      }, "text");
      }
  3. $.post:发送post请求

    • 语法

      $.post(url,[date],[callback],[type]);
      /**
      url:请求路径
      data:请求参数
      callback:回调函数
      type:响应结果的类型
      */
    • 示例

      //定义方法
      function fun() {
      $.post("../ajaxServlet",{
      username:"张三",
      },function (data) {
      alert(data);
      }, "text");
      }

JSON

概念

  1. JavaScript Object Notation(JavaScript对象表示法)

    let p={"name":"zhangsan","age":23,"gender":"男"};
  2. JSON现在多用于存储和交换文本信息的语法

  3. 进行数据的传输

  4. JSON比xml更小,更快,更易解析

语法

基本规则

  1. 数据在名称/值对中:JSON数据是由键值对构成的
    • 键用引号(单双都行)引起来,也可以不使用引号
    • 值得取值类型:
      1. 数字(整数或浮点数)
      2. 字符串(在双引号中)
      3. 逻辑值(true 或 false)
      4. 数组(在方括号中) {"persons":[{},
      5. 对象(在花括号中) {"address":{"province":"陕西"....}}
      6. null
  2. 数据由逗号分隔:多个键值对由逗号分隔
  3. 花括号保存对象:使用{ }定义JSON格式
  4. 方括号保存数组:[ ]

示例

//定义基本格式
let person ={"name":"张三",age:20,'gender':true};
//嵌套格式 {}---->[]
let persons ={
"persons":[
{"name":"张三",age:20,'gender':true},
{"name":"张三",age:20,'gender':true},
{"name":"张三",age:20,'gender':false},
]
};
//嵌套格式 []--->{}
let ps=[
{"name":"张三",age:20,'gender':true},
{"name":"张三",age:20,'gender':true},
{"name":"张三",age:20,'gender':false},
];

获取数据

  1. json对象.键名

  2. json对象["键名"]

  3. 数组对象[索引]

  4. 遍历

    //1.定义基本格式
    var person = {"name": "张三", age: 23, 'gender': true};
    var ps = [{"name": "张三", "age": 23, "gender": true},
    {"name": "李四", "age": 24, "gender": true},
    {"name": "王五", "age": 25, "gender": false}];
    //获取person对象中所有的键和值
    //for in 循环
    /* for(var key in person){
    //这样的方式获取不行。因为相当于 person."name"
    //alert(key + ":" + person.key);
    alert(key+":"+person[key]);
    }*/
    //获取ps中的所有值
    for (var i = 0; i < ps.length; i++) {
    var p = ps[i];
    for(var key in p){
    alert(key+":"+p[key]);
    }
    }

JSON数据和Java对象的相互转换

image

JSON解析器:

常见的解析器:Jsonlib,Gson,fastjson,jackson

JSON转为Java对象

  1. 导入jackson的相关jar包

    Maven Repository: com.fasterxml.jackson.core » jackson-databind » 2.13.2.1 (mvnrepository.com)

  2. 创建Jackson核心对象 ObjectMapper

  3. 调用ObjectMapper的相关方法进行转换

    readValue(json字符串数据,Class)

Java对象转换JSON

步骤
  1. 导入jackson的相关jar包
  2. 创建Jackson核心对象 ObjectMapper
  3. 调用ObjectMapper的相关方法进行转换
转换方法
  1. writeValue(参数1,obj):

    • 参数1:
      • File:将obj对象转换为JSON字符串,并保存到指定的文件中
      • Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
      • OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
  2. writeValueAsString(obj):将对象转为json字符串

注解
  1. @JsonIgnore:排除属性。

  2. @JsonFormat:属性值得格式化

    @JsonFormat(pattern = "yyyy-MM-dd")
复杂java对象转换
  1. List:数组
  2. Map:对象格式一致

示例

Person
package domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.Date;
public class Person {
private String name;
private int age;
private String gender;
// @JsonIgnore//忽略该属性
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", birthday=" + birthday +
'}';
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
JacksonTest
package test;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import domain.Person;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class JacksonTest {
//Java对象转为JSON字符串
@Test
public void test1() throws IOException {
//创建Person对象
Person p=new Person();
p.setName("张三");
p.setAge(20);
p.setGender("男");
//创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//转换
/**
* 转换方法:
* WriteValue(参数1,obj)
* 参数1:
* File:将obj对象转换为JSON字符串,并保存到指定的文件中
* Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
* OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
* WriteValueAsString(obj):将对象转换为JSON字符串
*/
String json=mapper.writeValueAsString(p);
//Output:{"name":"张三","age":20,"gender":"男"}
System.out.println(json);
//writeValue,将数据写到a.txt文件中
// mapper.writeValue(new File("src/test/resources/a.txt"),p);
//writeValue,将数据关联到Writer中
mapper.writeValue(new FileWriter("src/test/resources/b.txt"),p);
}
@Test
public void test2() throws IOException {
//创建Person对象
Person p=new Person();
p.setName("张三");
p.setAge(20);
p.setGender("男");
p.setBirthday(new Date());
//2.转换
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(p);
System.out.println(json);
}
@Test
public void test3() throws IOException {
//创建Person对象
Person p = new Person();
p.setName("张三");
p.setAge(20);
p.setGender("男");
p.setBirthday(new Date());
Person p1 = new Person();
p1.setName("张三");
p1.setAge(20);
p1.setGender("男");
p1.setBirthday(new Date());
Person p2 = new Person();
p2.setName("张三");
p2.setAge(20);
p2.setGender("男");
p2.setBirthday(new Date());
//创建List集合
List<Person> ps=new ArrayList<Person>();
ps.add(p);
ps.add(p1);
ps.add(p2);
//2.转换
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(ps);
//Output:[{"name":"张三","age":20,"gender":"男","birthday":"2022-03-27"},{"name":"张三","age":20,"gender":"男","birthday":"2022-03-27"},{"name":"张三","age":20,"gender":"男","birthday":"2022-03-27"}]
System.out.println(json);
}
@Test
public void test4() throws IOException {
//创建Person对象
Map<String,Object> map=new HashMap<String,Object>();
map.put("name","张三");
map.put("age",20);
map.put("gender","男");
//2.转换
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(map);
//Output:{"gender":"男","name":"张三","age":20}
System.out.println(json);
}
/**
* 演示JSON字符串转为Java对象
* @throws Exception
*/
@Test
public void test5() throws Exception{
//初始化JSON对象
String json="{\"gender\":\"男\",\"name\":\"张三\",\"age\":20};";
//创建Jackson的核心对象 ObjectMapper
ObjectMapper mapper=new ObjectMapper();
//转换为Java对象 Person对象
Person p=mapper.readValue(json,Person.class);
System.out.println(p);
}
}

案例

校验用户名是否存在

image

代码

UserDaoImpl
@Override
public Login findUserByName(String name) {
String sql="SELECT * FROM login WHERE username = ?";
try {
Login login=template.queryForObject(sql,new BeanPropertyRowMapper<Login>(Login.class),name);
return login;
} catch (EmptyResultDataAccessException e) {
return null;
}
}
test_findUserServlet
package web.servlet;
import com.fasterxml.jackson.databind.ObjectMapper;
import domain.Login;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import service.UserService;
import service.impl.UserServiceImpl;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@WebServlet(name = "test_findUserServlet", value = "/test_findUserServlet")
public class test_findUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取用户名
String username= request.getParameter("username");
//2. 调用service层的方法判断用户名是否存在
UserService service = new UserServiceImpl();
Login login = service.findUserByName(username);
//3. 判断用户名是否存在
//期望服务器响应回的数据格式: {"userExsit":true,"msg":"此用户名太受欢迎,请更换一个"}
// {"userExsit":false,"msg":"此用户名可以使用}
//设置响应的数据格式为json
response.setContentType("application/json;charset=utf-8");
Map<String, Object>map=new HashMap<String, Object>();
if(login!=null){
//存在
map.put("userExsit",true);
map.put("msg","此用户名太受欢迎,请更换一个");
}else if(username!=null&&!"".equals(username)){
//不存在
map.put("userExsit",false);
map.put("msg","此用户名可以使用");
}else{
map.put("userExsit",true);
map.put("msg","用户名不能为空");
}
//4. 将map对象转换为json字符串,并且传递给客户端浏览器
//将map转为json字符串
ObjectMapper mapper = new ObjectMapper();
//并且传递给客户端浏览器
mapper.writeValue(response.getWriter(),map);
}
}
regist.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script>
//在页面加载完成后执行
$(function () {
//给username绑定blur事件
$("#username").blur(function () {
//获取username文本输入框的值
let username = $(this).val();
//发送ajax请求
//期望服务器响应回的数据格式: {"userExsit":true,"msg":"此用户名太受欢迎,请更换一个"}
// {"userExsit":false,"msg":"此用户名可以使用}
$.get("test_findUserServlet",{username:username},function (date) {
//判断userExsit键的值是否为true
let span = $("#s_username");
if (date.userExsit){
//用户名存在
span.css("color","red");
span.html(date.msg);
}else{
//用户名不存在
span.css("color","green");
span.html(date.msg);
}
}, );
});
});
</script>
</head>
<body>
<form action="">
<input type="text" name="username" id="username" placeholder="请输入用户名">
<span id="s_username" class=""></span>
<br>
<input type="password" name="password" id="password" placeholder="请输入密码">
<input type="submit" value="注册">
</form>
</body>
</html>

注:

  1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:

    1. $.get(type):将最后一个参数type指定为"json"
    2. 在服务器端设置MIME类型
    response.setContentType("application/json;charset=utf-8");
  2. 遇到的问题:

    1. 报错:
      image
    2. 报错
      image
posted @   灰之魔女伊蕾娜  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示