jQuery

jQuery

jQuery基本介绍

  • jQuery是一款主流浏览器的JavaScript库,封装了JavaScript相关方法调用,简化JavaScript对HTML DOM操作,做事件、动画、ajax处理等。
  • 官方地址:https://jquery.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pqFk2EHh-1625537853117)(C:\Users\naizhi\AppData\Roaming\Typora\typora-user-images\image-20210624190540120.png)]

jQuery下载

  • 下载地址:https://jquery.com/download/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rUImK98h-1625537853118)(C:\Users\naizhi\AppData\Roaming\Typora\typora-user-images\image-20210624190808786.png)]

  • 压缩版本:文件体积比较小,适合项目上线后使用。 jquery-3.6.0.min.js
  • 未压缩:体积比较大,可读性比较好,适合开发阶段使用。 jquery-3.6.0.js
  • 可以通过把鼠标放在下载超链接看右下角的显示判断是否压缩

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qs0B9Q1P-1625537853120)(C:\Users\naizhi\AppData\Roaming\Typora\typora-user-images\image-20210624191411197.png)]

使用Jquery

  • 使用步骤:

    1. 需要在你的项目中加入jquery的文件,idea中是把jquery放在webapp目录。一般是创建一个js目录,存放js文件的。对于hbuilder工具,放在项目的js目录中就可以了。
    2. 创建一个html文件或者jsp文件都可以,在文件中使用jQuery。
    <script src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript"></script>
    
    1. 在js代码中,调用jquery中函数。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>第一个jquery代码</title>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
        /**
         * $ :jquery中的函数名
         * document:是参数
         * $(document):把js中的document对象变成jquery可以使用的对象。
         *              然后调用ready()的函数。这个ready()是jquery中的函数。
         *              ready()的执行时间在页面dom对象加载后执行的。
         *              相当于js中onload事件。
         * ready(函数):表示在页面对象加载后执行这个函数。
         */
        $(document).ready(function () {
            alert("Hello,jquery")
        });
        
        $(document).ready(myinit());
        function myinit() {
            alert("====相当于οnlοad==")
        }
        //jquery提供了简单方式,使用ready()
        //$(参数是一个函数)
        $(function () {
            alert("简单的方式使用ready")
        });
    </script>
</head>
<body>
</body>
</html>

对象的分类

  • 在一个文件中同时存在两种对象:dom对象和jquery对象

    1. dom对象:使用js的代码获取,创建的对象。html中的对象都是dom对象

    2. jquery对象:使用jquery语法获取的对象。

  • 为什么要使用dom对象,以及jquery对象?

目的是要dom对象的函数或者属性,以及要使用jquery中提供的函数或者属性。

要dom中的内容就需要使用dom对象,要使用jquery函数库中的函数需要使用jquery对象。

  • dom对象和jquery对象可以相互转换的。

dom对象转为jquery对象

  • 语法:$(dom对象)得到的是一个jquery对象,可以调用jquery中提供的函数。
 <input type="text" id="t1">
//通过js的函数,获得dom对象
var dom = document.getElementById("t1");
//把dom转为jquery
var jqueryObj = $(dom);
//调用jquery中的函数
jqueryObj.val();//获取dom对象的value属性的值
//注意:为了区分dom对象和jquery对象,可以在jquery对象变量名上,加一个$,例如 $obj

jquery对象转为dom对象

  • 语法:jquery对象是一个数组,数组成员是dom对象,使用[下标]或get(下标)。
<input type="text" id="txt1">
//使用jquery的方式表示这个dom对象
//$("#txt1"):获取id为txt1的dom对象
var obj = $("#txt1");//obj是一个jquery对象,是一个包含了一个成员的dom数组。
//obj[0]就是dom对象
var dom =obj[0];//或者obj.get(0)
//使用dom对象的函数或者属性
alert(dom.value);

选择器

  • 什么是选择器?

选择器就是一个字符串,是一个定位dom对象的字符串。使用这个字符串作为条件定位dom对象。可以使用id、class、标签名称等作为选择器使用,定位dom对象。

基本选择器

  • 使用dom对象的id、class名称、标签名称等作为条件定位dom对象
  1. 使用dom对象的id作为条件

    • 语法:$("#id");
  2. class选择器:使用对象的class名称定位dom对象

    • 语法:$(".class名称");
  3. 标签选择器:使用标签名称作为条件定位dom对象

    • 语法:$(“标签名称”);
  4. 所有选择器:

    • 语法:$("*");
  5. 组合选择器:

    • 语法:$("#id,.class,标签名称");
    • 组合选择器使用id或者class名称或者标签名称定位dom对象,id、class、标签名称可以任意组合。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本选择器</title>
    <style>
        div{
            background: gray;
            width: 100px;
            height:100px;
        }
    </style>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script>
        function fun1() {
            //id选择器
            var obj = $("#one");
            obj.css("background","red")
        }
        function fun2() {
            //class选择器(样式选择器)
            var obj = $(".two");
            //jquery对象是数组,在使用jquery函数时,把数组每个成员都应用css函数
            obj.css("background","pink")
        }
        function fun3() {
            //标签名称选择器
            var obj = $("div");
            obj.css("background","yellow")
        }
        function fun4() {
            //所有选择器
            var obj = $("*");
            obj.css("background","orange")
        }
        function fun5() {
            //组合选择器
            var obj = $("#one,span");
            obj.css("background","blue")
        }
    </script>
</head>
<body>
    <div id="one">我是id为one的div</div>
    <div class="two">我是class为two的div</div>
    <div >我是普通的div</div>
    <span>我是一行文字</span><br>
    <input type="button" value="获取id=one的dom对象" onclick="fun1()">
    <input type="button" value="获取class=two" onclick="fun2()">
    <input type="button" value="获取标签是div的dom对象" onclick="fun3()">
    <input type="button" value="获取所有的dom对象" onclick="fun4()">
    <input type="button" value="组合选择dom对象" onclick="fun5()">
</body>
</html>

表单选择器

  • 表单选择器是使用dom对象的type属性值定位dom对象,和form标签无关
  • 语法:$(“type属性值”)
 <input type="text" >
 <input type="text" >
 //使用表单选择器:$(":text");
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单选择器</title>
    <style>
        div{
            background: gray;
            width: 100px;
            height:100px;
        }
    </style>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script>
        function fun1() {
            //使用表单选择器,获取dom对象
            var obj = $(":text");
            alert(obj.val());
        }
        function fun2() {
            var obj = $(":radio");
            for (var i =0;i<obj.length;i++){
                var dom = obj[i];//dom是dom对象
                alert("dom属性="+dom.value+",jquery属性="+$(dom).val());
            }
        }
        function fun3() {
            var obj = $(":checkbox");
            for(var i =0;i<obj.length;i++){
                alert($(obj[i]).val());
            }
        }
    </script>
</head>
<body>
    <p>文本框</p>
    <input type="text" value="我是一个文本框"><br>
    <p>单选框</p>
    <input type="radio" value="man"><input type="radio" value="woman"><br>
    <p>多选框</p>
    <input type="checkbox" value="bike">骑行
    <input type="checkbox" value="football">足球
    <input type="checkbox" value="music">音乐
    <br>
    <input type="button" value="读取文本框的value值" onclick="fun1()">
    <input type="button" value="读取单选框的value值" onclick="fun2()">
    <input type="button" value="读取多选框的value值" onclick="fun3()">

</body>
</html>

过滤器

  • 过滤器是一个字符串,用来筛选dom对象,过滤器是和选择器一起使用的。在选择了dom对象后,再进行过滤筛选。

基本过滤器

  • 使用dom对象在数组中的位置,作为过滤条件的
  1. 选择数组中第一个dom成员
    • 语法:$(“选择器:first”);
  2. 选择数组中最后一个成员
    • 语法:$(“选择器:last”);
  3. 选择等于指定下标的dom成员
    • 语法:$(“选择器:eq(下标)”);
  4. 选择大于某个下标的所有成员
    • 语法:$(“选择器:gt(下标)”);
  5. 选择小于某个下标的所有成员
    • 语法:$(“选择器:lt(下标)”);
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本过滤器</title>
    <style>
        div{
            background: gray;
            width: 100px;
            height:100px;
        }
    </style>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script>

        $(function () {
            //btn1事件
            $("#btn1").click(function () {
                //选择第一个div
                var obj = $("div:first");
                obj.css("background","pink");
            });
            //btn2事件
            $("#btn2").click(function () {
                //选择最后一个div
                /*var obj = $("div:last");
                obj.css("background","pink");*/
                $("div:last").css("background","blue");
            });
            //btn3事件
            $("#btn3").click(function () {
                //选择指定下标的div
                $("div:eq(3)").css("background","red");
            });
            //btn4
            $("#btn4").click(function () {
                //选择大于指定下标div
                $("div:gt(3)").css("background","orange");
            });
            //btn4
            $("#btn5").click(function () {
                //选择小于指定下标div
                $("div:lt(3)").css("background","green");
            });
        });


    </script>
</head>
<body>
    <div id="one">div0</div>
    <div id="two">div1</div>
    <div>
        div2
        <div>div3</div>
        <div>div4</div>
    </div>
    <div>div5</div>
    <input type="button"  id="but1" value="获取数组中第一个dom对象" >
    <input type="button"  id="but2" value="获取数组中最后一个dom对象" >
    <input type="button"  id="but3" value="选择下标等于3的div" >
    <input type="button"  id="but4" value="选择下标大于3的div" >
    <input type="button"  id="but5" value="选择下标小于3的div" >
    

</body>
</html>

表单过滤器

  • 根据对象的状态作为条件,筛选dom对象
  1. 获取可用的文本框
    • 语法:$(":text:enabled")
  2. 获取不可用的文本框
    • 语法:$(":text:disabled")
  3. 获取选中的复选框
    • 语法:$(":checkbox:checked")
  4. 获取选中的下拉列表框
    • 语法:$(":选择器>option:selected")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本过滤器</title>
    <style>
        div{
            background: gray;
            width: 100px;
            height:100px;
        }
    </style>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script>

        $(function () {
            $("#btn1").click(function () {
                //所有可用的文本框
                var obj = $(":text:enabled");
                obj.val("hello");
            });
            $("#btn2").click(function () {
                //选中的复选框
                var obj = $(":checkbox:checked");
                for (var i=0;i<obj.length;i++){
                    alert(obj[i].value);
                }
            });
            $("#btn3").click(function () {
                //选中的下拉列表框
                var obj = $("#lang>option:selected");
                alert(obj.val());
            })
        });
    </script>
</head>
<body>
    <input type="text" value="文本1"><br>
    <input type="text" value="文本2" disabled="true" ><br>
    <input type="text" value="文本3"><br>
    <input type="text" value="文本4" disabled><br>
    <input type="checkbox" value="游泳">游泳 <br>
    <input type="checkbox" value="健身" checked="true">健身 <br>
    <input type="checkbox" value="电子游戏" checked>电子游戏 <br>
    <select  id="lang">
        <option value="java">java语言</option>
        <option value="go" selected>go语言</option>
        <option value="python">python语言</option>
    </select><br>
    <button id="btn1">给所有可用的文本框设置value为hello</button>
    <button id="btn2">显示所有选中的复选框值</button>
    <button id="btn3">显示选中的下拉列表框</button>
</body>
</html>

函数

常用函数1

  1. val():操作dom对象的value值

    • val():没有参数,获取dom数组中第一个dom对象的value值
    • val(参数):有参数,给dom数组中所有dom对象的value属性赋值
  2. text():操作标签的文本内容,标签开始和结束之间的内容

    • text():没有参数,把dom数组中所有dom对象的文本内容链接起来,形成一个字符串,并返回这个字符串
    • text(参数):有参数,给dom数组中的所有成员统一赋予新的文本
  3. attr():操作value、文本以外的属性

    • attr(“属性名”):获取dom数组中第一个dom成员的此属性值
    • attr(“属性名”,“属性值”):给dom数组中所有dom成员此属性赋值
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>常用函数1</title>    <script src="js/jquery-1.8.3.min.js"></script>    <script>        $(function () {            $("#btn1").click(function () {                //获取第一个dom对象的value值                //var obj = $(":text").val();                var obj = $(":text:first").val();                alert(obj);            });            $("#btn2").click(function () {                //给所有的文本框赋值                $(":text").val("诸葛亮");            });            $("#btn3").click(function () {                //所有text()函数,读取文本内容                alert($("div").text());            });            $("#btn4").click(function () {                //所有text()函数,设置文本内容                $("div").text("我是div");            });            $("#btn5").click(function () {                //读取src的属性值,使用attr()函数                alert($("img").attr("src"))            });            $("#btn6").click(function () {                //设置新的图片                $("img").attr("src","imgs/a2.jpg");            });        });    </script></head><body>    <input type="text" value="刘备"><br>    <input type="text" value="关羽"><br>    <input type="text" value="张飞"><br>    <div>我们学习的是开发语言</div>    <div>是Java语言</div>    <div>是面向对象的</div>    <img src="imgs/a1.jpg" id="img1">    <button id="btn1">读取第一个文本框的value值</button>    <button id="btn2">给文本框赋予新值</button>    <button id="btn3">读取div的所有文本</button>    <button id="btn4">设置div的文本值</button>    <button id="btn5">读取src属性值</button>    <button id="btn6">设置src属性值,换一个图片</button></body></html>

常用函数2

  1. remove():删除选择的dom对象和它的子对象
    • 语法:$(“选择器”).remove()
  2. empty():删除dom对象的子对象
    • 语法:$(“选择器”).empty()
  3. append():给dom对象在他的后面增加新的dom对象
    • 语法:$(“选择器”).append(子dom对象)
  4. html()
    • html():获取dom数组中第一个dom对象的文本值(html()返回结果相当于innerHTML)
    • html(参数):给dom数组中所有成员设置新的文本内容(html()返回结果相当于innerHTML)
  5. each():是循环函数,可以循环数组,json,dom对象数组
    1. 语法:$.each(要循环的内容,function(index,element){处理函数})
      • 要循环的内容:可以是数组,json对象,dom对象数组
      • function:循环的处理函数,每个成员都会执行一次
      • index:是循环变量的值,名称自定义
      • element:是和index对应的成员,element名称是自定义
    2. 语法:$(“选择器”).each(要循环的内容,function(index,element){处理函数})
      • 可以对jquery对象进行循环处理,jquery对象就是dom数组
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>常用函数2</title>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script>

        $(function () {
            $("#btn1").click(function () {
               //删除dom和子dom对象
                $("select").remove();
            });
            $("#btn2").click(function () {
                //删除子dom对象
                $("select").empty();
            });
            $("#btn3").click(function () {
                //添加dom对象
                $("#mydiv").append("<button id='newbtn'>我是新加的按钮</button>")
            });
            $("#btn4").click(function () {
                //dom数组中第一个dom 的文本值,包含html标签的内容
               alert($("span").html())
            });
            $("#btn5").click(function () {
                //设置值,包含html标签的内容
               $("span").html("<b>我是新的内容</b>")
            });
            $("#btn6").click(function () {
                var num = [10,20,30];
                for(var i =0;i<num.length;i++){
                    doArrayContent(i,num[i]);
                }
            });
            $("#btn7").click(function () {
                var arr =['java','mysql','jquery'];
                $.each(arr,function (index, element) {
                    console.log("循环变量="+index+",数组成员="+element);
                })
            });
            $("#btn8").click(function () {
                var json={"name":"李四","age":"18","sex":"男"};
                //key循环json数组
                $.each(json,function (i, n) {
                    //i是key,n是value
                    console.log("i是json的key="+i+",n是json的value="+n);
                })
            });
            $("#btn9").click(function () {
                var domArray = $(":text");
                $.each(domArray,function (i, n) {
                    //i是循环变量,n是dom对象
                    console.log("i是循环变量="+i+",n是dom对象="+n.value);
                })
            });
            $("#btn10").click(function () {
                $(":text").each(function (i, n) {
                    console.log("i是循环变量="+i+",n是dom对象="+$(n).val());
                })
            });
            
        });
        //定义一个函数,处理数组中的每个内容
        function doArrayContent(index,element) {
            console.log("数组的循环变量是"+index+"数组成员为"+element);
        }
    </script>
</head>
<body>
<select>
    <option value="老虎">老虎</option>
    <option value="狮子">狮子</option>
    <option value=""></option>
</select>
<br>
<select>
    <option value="亚洲">亚洲</option>
    <option value="欧洲">欧洲</option>
    <option value="非洲">非洲</option>
</select>
<br>
<div id="mydiv" style="background: red">
    我是一个div
</div>
<span>我是<b>mysql</b>数据库</span>
<br>
<span>我要学习sql语言</span>
<br>
<input type="text" value="孙悟空"><br>
<input type="text" value="猪八戒"><br>
<input type="text" value="沙悟净"><br>
<input type="text" value="唐三藏"><br>
<button id="btn1">使用remove删除dom对象</button>
<button id="btn2">使用empty删除子dom对象</button>
<button id="btn3">使用append追加dom对象</button>
<button id="btn4">获取dom数组中第一个dom对象的文本(innerHTML)</button>
<button id="btn5">设置dom文本值(innerHTML)</button>
<button id="btn6">手工循环数组</button>
<button id="btn7">each循环普通数组</button>
<button id="btn8">each循环json对象</button>
<button id="btn9">each循环dom数组</button>
<button id="btn10">each第二种语法格式</button>
</body>
</html>

事件

  • jquery可以给dom对象绑定事件,在程序执行期间动态的处理事件

第一种事件绑定方式

  • 语法:$(“选择器”).事件名称(事件的处理函数)
  • $(“选择器”):选择0或多个dom对象,给他们绑定事件
  • 事件名称:就是js中去掉on的部分。例如:单价事件omclick,这里的事件名称就是click
  • 事件的处理函数:函数定义,当事件发生时,会执行这个函数。
//例如<input type="button"  id="but" value="绑定事件" >//绑定事件$("#btn").click(function () {    //单机的处理代码});    
<script>$(function () {    //页面dom对象加载后执行,相当于onload事件    //绑定事件    $("#btn").click(function () {        alert("单机过按钮了,执行处理函数")    });});</script><body>    <input type="button"  id="btn" value="绑定事件" ></body>        

第二种事件绑定方式(on)

  • 语法:$(“选择器”).on(事件名称,function(){事件处理函数})
  • 事件:就是js中去掉on的部分
  • funcction:事件处理函数
<body>    <input type="button"  id="btn" value="绑定事件" ></body>  <script>    $("#btn").on("click",function () {    alert("单击按钮了");    })</script>
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>on绑定事件</title>    <script src="js/jquery-1.8.3.min.js"></script>    <script>        $(function () {            $("#btn").on("click",function () {                $("#myDiv").append("<button id='newbtn'>我是新增的按钮</button>");                //给dom对象button绑定事件                $("#newbtn").on("click",function () {                    alert("我是新的按钮的单击事件");                })            })        });    </script></head><body>    <div id="myDiv" style="background-color: pink">        我是div    </div>    <br>    <input type="button"  id="btn" value="新增dom对象,绑定事件" ></body></html>

Ajax

  • 使用jquery提供的函数实现ajax请求的处理。代替直接使用XMLHttpRequest,但是jquery实际还是使用的异步对象。

$.ajax() (核心的函数)

  • 语法:$.ajax({json格式的参数})
  • json格式的参数:key是定义好的,需要开发人员给key赋值。这些key是用来表示ajax请求必须的参数。例如:请求的url地址、是不是异步请求、请求的方式等等。
$.ajax(
	{
    	url:"queryProvinceServlet",
        type:"get",
        data:{"name":"张三","age":20},
        dataType:"json",
        success:function(resp){开发人员获取数据,更新dom对象},
        error:function()(alert("请求错误"))}
)
  1. url:服务器的地址,例如某个servlet的访问地址。queryProvinceServlet
  2. type:表示请求的方式,get、post。默认是get。这个值不用区分大小写
  3. data:表示提交的请求参数。可以是string、数组、json类型的。推荐使用json格式
    • 例如:date:{“name”:“张三”,“age”:20}
    • jquery在发送请求时,会把json中的key作为请求的参数使用,key对应的值作为参数数据
    • 转为的结果:http://localhost:8080/myweb/queryProvinceServlet?name=李四&age=20
  4. dataType:数据格式,可以是html、xml、text、json等等。表示发起请求后,希望服务器端返回的数据格式。jquery可以尝试使用对应格式处理返回的数据。比如你指定了dataType:json,表示希望服务器返回的是json格式数据。然后jquery把json数据转为json对象。服务器代码可以获取到dataType的内容
    • 例如:请求中dataType:“json”,jquery发起请求后,在请求头中显示:Accept:application/json,text/javascript,/;q=0.01
    • 如果请求是dataType:“text”,请求中显示:Accept:text/plain,;q=0.01
  5. success:函数function。当服务器端返回了数据,jquery处理完数据后,执行这个函数。等同于异步对象的readyState==4 &&status ==200的情况
    • 例如:success:function(resp){开发人员处理服务器返回的数据}
    • resp是自定义形参,相当于:resp=xhr.responseText
    • error:function(),当请求错误时,执行这个函数。
    • contentType:表示请求的参数数据格式。例如:application/json,这个内容可以不写。
    • async:是一个boolean表示请求是同步的还是异步的。true是异步的,false是同步的。默认是true
$.ajax({
    url:"LoginServlet",
    type:"get",
    data:"name="+$("#name").val(),
    dataType:"text",
    success:function (resp) {
        //resp是服务器返回的数据,这个数据先通过jquery处理的
        $("#namespan").val(resp);
    }
});

$.get()

  • $.get()这个函数就是执行get请求方式的ajax
    • 语法:$.get(url,请求参数,success函数,dataType)
    • 例如:
$.get("queryName",{"proid":1},function(resp){获取省份名称},"text")
$.get("LoginServlet",
      "name="+$("#name").val(),
      function (resp) {$("#namespan").val(resp)},
      "text");

$.post()

  • $.post()执行post请求的ajax
    • 语法:$.post(url,请求参数,success函数,dataType)
    • 例如:
$.p("queryName",{"proid":1},function(resp){获取省份名称},"text")
$.post("LoginServlet",
      "name="+$("#name").val(),
      function (resp) {$("#namespan").val(resp)},
      "text");

级联查询

  • 思路:有两个数据库的查询
    1. 查询所有的省份名称和id
    2. 根据提交的省份id,查询city表,得到城市列表
    3. 有两个servlet介绍请求,一个查询所有的省份;一个接收省份id的参数,查询省份对应的城市列表
    4. 数据格式使用json
    5. 发起请求使用 . a j a x , .ajax, .ajax.get,$.post
    6. 事件:onChange()
  • 实现步骤:
    1. 数据表province(获取全部的id和name列的值),city表根据province的值,得到id,name列
    2. 创建web应用,加入mysql驱动的jar包和jackson的jar包
    3. 创建实体类(pojo):Province,City
    4. 创建Dao类,QueryDao类,有两个方法
    5. 创建servlet,两个servlet,一个查询所有的省份名称,一个查询城市列表
    6. 创建jsp,发起两个ajax的请求
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我走后的夜与昼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值