JQuery与AJAX

一.JQ

1.什么是JQ

一个轻量级的JS库(类似于Java中的jar包), 里面封装了一些JS的常见操作, 其本质上还是JS代码;
兼容css3和各大浏览器,提供了dom、events、animate、ajax等简易的操作; 并且jquery的插件非常丰富,大多数功能都有相应的插件解决方案;
JQuery的官方下载地址
JQuery文档地址

  • 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)

  • 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)

  • 3.x:不兼容IE678,很多老的jQuery插件不支持这个版本。目前该版本是官方主要更新维护的版本.

  • 注:开发版本与生产版本,命名为jQuery-x.x.x.js为开发版本,命名为jQuery-x.x.x.min.js为生产版本,开发版本源码格式良好,有代码缩进和代码注释,方便开发人员查看源码,但体积稍大。而生产版本没有代码缩进和注释,且去掉了换行和空行,不方便发人员查看源码,但体积很小

2.JQ的作用

简化JS对DOM树的操作;

3.JQ的使用

1.拷贝jq库到项目
2.把jq引入页面
3.$(匿名函数),该匿名函数中的代码会在文档加载完毕之后执行

3.1 JQ对象的获取及与JS对象的转换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JQuery和JS的对象转换</title>
    <!-- JQuery的静态引入   -->
    <script src="jq/jquery-3.3.1.min.js"></script>
    <!--  JQuery的动态引入  -->
    <!--    <script src="https://libs.baidu.com/jquery/3.3.1/jquery.min.js"></script>-->
</head>
<body>
<input type="text" value="rzc">
<input type="text" value="ws" id="ipt">
<input type="text" value="wsRzc" class="clazz">
</body>
<script>
    /**
         目标: 通过 JQuery 对象获取输入框中的内容
         JQuery对象的实际是JS的对象数组
         JQuery对象获取方式一: 通过标签名获取
         JQuery对象获取方式二: 通过id名获取
         JQuery对象获取方式三: 通过class名获取
     */

        // 方式一
    let val = $("input");
    console.log(val.length);
    console.log(val[0].value);

    // 方式二
    let $ipt = $("#ipt");
    console.log($ipt.val());

    // 方式三
    let $clazz = $(".clazz");
    console.log($clazz.val());

    // 将js对象转换为jq对象
    let elementById = document.getElementById("ipt");
    console.log($(elementById).val());

    // 将jq对象转换为js对象
    let inputs = $("input");
    let input = inputs[0];
    console.log(input.value);
</script>
</html>

3.2 JQuery操作DOM对象

3.2.1 JQuery的选择器

基本选择器
选择器名称 语法 解释
标签选择器(元素选择器) $("html标签名") 获得所有匹配标签名称的于元素
id选择器 $("#id的属性值") 获得与指定id属性值匹配的元素
类选择器 $(".class的属性值") 获得与指定的class属性值匹配的元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本选择器</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input type="text" class="c1"><br>
<input type="text" class="c1"><br>
<input type="text" id="ccs"><br>
<script>
    /**
     * 获取 相应 input 标签的个数
     * 1.标签选择器 语法格式 $("标签名")
     * 2.类选择器 语法格式 $(".类名")
     * 3.id选择器 语法格式 $("#ID名")
     */

    // 1.标签选择器
    console.log("input标签的个数为" + $("input").length)
    // 2.类选择器
    console.log("class为 c1 标签的个数为" + $(".c1").length)
    // 3.id选择器
    console.log("id为ccs的标签的个数为" + $("#ccs").length)
</script>
</body>
</html>
层级选择器
选择器名称 语法 解释
==后代选择器== $("A B ") 选择A元素内部的所有B元素
子选择器 $("A > B") 选择A元素内部的所有B子元素, 不包括孙子层级
兄弟选择器 $("A + B") 获得A元素同级的下一个B元素
兄弟选择器 $("A ~ B") 获得A元素之后的同级所有B元素
<!DOCTYPE html>
<html>
<head>
    <title>层次选择器</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <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 src="jq/jquery-3.3.1.min.js"></script>
</head>

<body>
<input onclick="fn1()" type="button" value=" 改变 <body> 内所有 <div> 的背景色为红色" id="b1"/>
<input onclick="fn2()" type="button" value=" 改变 <body> 内子 <div> 的背景色为 红色" id="b2"/>
<input onclick="fn3()" type="button" value=" 改变 id 为 one 的下一个 <div> 的背景色为 红色" id="b3"/>
<input onclick="fn4()" type="button" value=" 改变 id 为 two 的元素后面的所有兄弟<div>的元素的背景色为 红色" 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>

<div id="mover">
    动画
</div>

<span class="spanone">
    span
</span>

</body>

<script type="text/javascript">
    //改变 <body>内所有<div>的背景色为红色
    function fn1() {
        //先获取到body内的所有div标签,然后通过方法设置它的背景色
        //语法格式 "A B",找到A里面的所有B元素
        //css(样式名,样式值)改变标签的样式
        $("body div").css("background-color", "red");
    }

    //改变 <body> 内的子 <div> 的背景色为 红色
    //语法格式 "A>B" ,找到A里面的子标签B
    function fn2() {
        $("body>div").css("background-color", "red");
    }

    //改变 id 为 one 的下一个 <div> 的背景色为 红色
    //A+B 找到和A标签同级的下一个B标签
    function fn3() {
        $("#one+div").css("background-color", "red")
    }

    //改变 id 为 two 的元素后面的所有兄弟<div>的元素的背景色为 红色
    //A~B
    function fn4() {
        $("#two~div").css("background-color", "red")
    }
</script>
</html>
属性选择器
选择器名称 语法 解释
属性选择器 $("A[属性名]") 包含指定属性的选择器
属性选择器 $("A[属性名='值']") 包含指定属性等于指定值的选择器
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>属性选择器</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input type="text">
<input type="password" id="ipt">
<script>
    //目标:设置文本框的背景色为红色,密码框的背景色为蓝色
    //属性选择器: [属性名='属性值']
    $("input[type='text']").css("background-color", "red");
    $("input[type='password']").css("background-color", "blue");
</script>
</body>
</html>
基本过滤选择器
选择器名称 语法 解释
首元素选择器 标签名:first 获得为此标签名的第一个元素
尾元素选择器 标签名:last 获得为此标签名的最后一个元素
非元素选择器 标签名:not(selecter) 不包括指定内容的元素
偶数选择器 标签名:even 偶数,从 0 开始计数
奇数选择器 标签名:odd 奇数,从 0 开始计数
等于索引选择器 标签名:eq(index) 指定索引元素
大于索引选择器 标签名:gt(index) 大于指定索引元素(不包括指定索引)
小于索引选择器 标签名:lt(index) 小于指定索引元素(不包括指定索引)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>基本过滤选择器</title>
    <script src="jq/jquery-3.3.1.min.js"></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>
<script>
    //目标1:设置第一行的背景色为红色
    // :first 找到第一个某标签
    $("tr:first").css("background-color","red")

    //目标2: 设置最后一行的背景色为蓝色
    // :last 找到最后一个某标签
    $("tr:last").css("background-color","blue")

    //目标3: 设置所有奇数行的背景色为绿色
    // :odd 找到下标为奇数的某标签
    $("tr:odd").css("background-color","green")

    //目标4: 设置所有偶数行的背景色为灰色
    // :even 找到下标为偶数的某标签
    $("tr:even").css("background-color","gray")

    //目标5: 设置下标为3的那一行的背景色为黄色
    // :eq(index) 找到下标为某个值的标签
    $("tr:eq(2)").css("background-color","yellow")

    // 目标6: 设置下标小于3的所有行的背景色为粉红色
    // :lt(index) 找到下标小于某个值的标签
    $("tr:lt(3)").css("background-color","pink")

    // 目标7 :设置下标大于3的所有行的背景色为橘黄色
    // :gt(index) 找到下标大于某个值的标签
    $("tr:gt(3)").css("background-color","orange")
</script>
</html>
表单属性过滤选择器
选择器名称 语法 解释
可用元素选择器 :enabled 获得可用元素
不可用元素选择器 :disabled 获得不可用元素
复选框选中选择器 :checked 获得单选/复选框选中的元素
下拉框选中选择器 :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">
    <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 src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input type="button" onclick="fn1()" value="设置可用的文本框的背景色为红色" id="b1"/>
<input type="button" onclick="fn2()" value="设置不可用的文本框的背景色为红色" id="b2"/>
<input type="button" onclick="fn3()" value="获取选中的多选框的个数" id="b3"/>
<input type="button" onclick="fn4()" value="获取选中的下拉框的个数" 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>
<script type="text/javascript">
    //设置可用的文本框的背景色为红色
    function fn1() {
        $("input:text:disabled").css("background-color", "red")
    }

    //设置不可用的文本框的背景色为红色
    function fn2() {
        $("input:text:enabled").css("background-color", "red")
    }

    //获取选中的多选框的个数
    function fn3() {
        console.log($("input:checkbox:checked").length)
    }

    //获取选中的下拉框的个数
    function fn4() {
        console.log($("option:selected").length)
    }
</script>
</html>

3.2.2 JQuery操作标签的样式

API方法 解释
css(name) 使用很少 获取CSS样式
css(name,value) 设置CSS样式
addClass(类名) 给标签添加类名
removeClass(类名) 删除标签的类名
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery操作标签的样式</title>
    <style>
        /*css的类选择器*/
        .redStyle{
            background-color: red;
            width: 600px;
            height: 40px;
        }

        .blueStyle{
            background-color: blue;
            width: 600px;
            height: 40px;
        }
    </style>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input id="ipt" type="text" onmouseover="fn1()" onmouseout="fn2()">
<script>
    $("#ipt").addClass("blueStyle")

    //目标: 鼠标移入输入框的时候,设置输入框的背景色为红色,移出输入框的时候设置输入框的背景色为蓝色
    function fn1() {
        $("#ipt").addClass("redStyle")
        $("#ipt").removeClass("blueStyle");

    }

    function fn2() {
        $("#ipt").addClass("blueStyle")
        $("#ipt").removeClass("redStyle");
    }
</script>
</body>
</html>

3.2.3 JQuery操作标签的属性

API方法 解释
attr(name,[value]) 获得/设置属性的值
prop(name,[value]) 获得/设置属性的值(checked,selected)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery操作标签的属性</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input xx="oo" type="text" id="ipt">
<br>
<input xx="oo" type="checkbox" name="checkbox">
<input xx="oo" type="checkbox" name="checkbox">
<input xx="oo" type="checkbox" name="checkbox">
<input xx="oo" type="checkbox" name="checkbox">
<script>
    //如果是操作表单项的value属性,可以调用jQuery对象的val()方法进行操作
    //val() 获取表单项的value属性值,val(属性值)表示设置表单项的value属性值

    //jQuery对象的attr()方法,可以操作标签的一切属性
    //attr(属性名),代表获取标签的某个属性;attr(属性名,属性值),代表设置标签的某个属性
    //设置标签的type属性为password
    $("#ipt").attr("type","password")
    //获取input标签的type属性
    let type = $("#ipt").attr("type");
    console.log(type)

    //jQuery对象的prop()方法,只能操作标签内置的属性;
    //如果该属性是boolean类型的比如:checked、selected、disabled等等属性,使用prop方法操作
    $("input[type='checkbox']").prop("checked",true)

</script>
</body>
</html>

3.2.4 JQuery操作标签体的内容

API方法 解释
val([value]) 获得/设置标签里面value属性相应的值
text([value]) 获得/设置元素的文本内容
html([value]) 获得/设置元素的标签体内容
val()         获得表单项标签里面value属性的值;  value属性的封装  
val("...")    给表单项标签value属性设置值;

html()       获得标签的内容,如果有标签,一并获得;  相当于JavaScript里面的innerHTML
html("...")  设置html代码,如果有标签,将进行解析;

text()       获得标签的内容,如果有标签,忽略标签;  相当于JavaScript中的innerText
text("...")  设置文本,如果含有标签,把标签当做字符串,不支持标签
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JQuery操作标签体内容</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<div id="city"><h1>北京</h1></div>
<input type="button" value="改变" onclick="changeCityName()">
<script>
    function changeCityName() {
        //目标1:获取标签体的内容
        //js的innerHTML属性对应jQuery的html() 获取标签体额所有内容
        //js的innerText属性对应jQuery的text() 获取标签体的文本内容
        /*let html = $("#city").html();
        console.log(html)*/

        //目标2:改变标签体的内容
        $("#city").html("<h1>深圳</h1>")
    }
</script>
</body>
</html>

3.2.5 JQuery创建, 删除, 添加标签

API方法 解释
$("A") 创建A元素对象
append(element) 添加成尾子元素,两者之间是父子关系
prepend(element) 添加成首子元素,两者之间是父子关系
appendTo(element) 添加到父元素的内部末尾
prependTo(element) 添加到父元素的内部首位
before(element) 添加到当前元素的前面,两者之间是兄弟关系
after(element) 添加到当前元素的后面,两者之间是兄弟关系
remove() 删除指定元素(自己移除自己)
empty() 清空指定元素的所有子元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery创建、删除、添加标签</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<ul id="city">
    <li id="bj">北京</li>
    <li id="sh">上海</li>
    <li id="sz">深圳</li>
    <li id="gz">广州</li>
</ul>
<input type="button" value="添加" onclick="addCity()"><br>
<input type="button" value="删除" onclick="removeCity()"><br>
<input type="button" value="清空城市列表" onclick="removeAllCity()">
<script>
    //目标1: 点击添加按钮,往城市列表中添加一个"长沙"
    function addCity() {
        //append()方法是往父标签的后面添加子标签
        // $("#city").append("<li id='bj'>长沙</li>")

        //appendTo()方法:子标签.appendTo(父标签)
        // $("<li id='cs'>长沙</li>").appendTo($("#city"))

        //prepend()方法是往父标签的首元素位置添加子标签
        // $("#city").prepend("<li id='cs'>长沙</li>")

        //prependTo(): 子标签.prependTo(父标签)

        //兄弟标签.after(新标签),将新标签添加到某个兄弟标签之后
        // $("#sh").after("<li id='cs'>长沙</li>")

        //兄弟标签.before(新标签),将新标签添加到兄弟标签之前
    }

    function removeCity() {
        //目标: 删除上海
        $("#sh").remove()
    }

    //清空城市列表,但是要保留ul标签
    function removeAllCity() {
        //就是删除ul标签中的所有子标签
        //empty()清除某个标签的所有子标签
        $("#city").empty()
    }
</script>
</body>
</html>

3.3 JQuery的事件

单个事件语法格式:
    JQuery对象.事件方法名(function(){});
多个事件链式写法:
    JQuery对象.事件方法名(function(){}).事件方法名(function(){})
事件的绑定
    绑定: JQuery对象.on("事件方法名",function(){})
    链式绑定: JQuery对象.on("事件方法名",function(){}).on("事件方法名",function(){})
    解绑: JQuery对象.off("事件方法名")
    链式解绑: JQuery对象.off("事件方法名").off("事件方法名")
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery绑定事件</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input type="button" value="按钮" id="ipt">
<script>
    //使用jQuery的方式进行动态绑定事件
    //jQuery对象.方法名(匿名函数),如果要一次性绑定多个事件,则可以使用链式写法
    $("#ipt").click(function () {
        alert("被点击了")
    }).mouseover(function () {
        console.log("鼠标移入了")
    })

    //另外一种使用jQuery动态绑定事件的方式
    $("#ipt").on("click",function () {
        alert("点击了")
    }).on("mouseover",function () {
        console.log("鼠标移入了")
    })

    //jQuery还可以进行事件的解绑,off()
    //如果不传入事件类型表示解绑"通过jQuery方式动态绑定的所有事件"
    //如果传入事件类型只解绑该类事件
    $("#ipt").off("click")
</script>
</body>
</html>

3.4 JQuery的遍历

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JQuery的遍历</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<input type="text" value="张三">
<input type="text" value="李四">
<input type="text" value="王五">
<script>
    let arr = ["a", "b", "c", "d"]

    //获取所有的input标签
    let $input = $("input");

    //回忆使用js的方式进行遍历: 1. for循环
    /*for (var i = 0; i < $input.length; i++) {
        //遍历出来的每一个input标签是js对象
        var $inputElement = $input[i];
        var value = $inputElement.value;
        console.log(value)
    }*/

    //使用ECMAScript6 之后的语法 for of进行遍历
    /*for(element of $input){
        //遍历出来的每一个元素是js对象
        var value = element.value;
        console.log(value)
    }*/

    //jQuery对象的each()方法
    $input.each(function (index, element) {
        console.log(index + "," + element.value);
    })

    //jQuery全局的each()方法,这个方法不需要使用jQuery的对象调用,而是使用$调用
    $.each(arr, function (index, element) {
        console.log(index + "," + element);
    })
    $.each($input, function (index, element) {
        console.log(index + "," + element.value);
    })
</script>
</body>
</html>

二.JQ案例

1.页面定时弹出广告

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>定时弹出广告</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>

<img id="ad" src="img/ad.jpg" style="display: none;width:100%;"/>
</body>
<script>
    // 显示的函数
    function show() {
        $("#ad").show(3000, function () {
            setTimeout(hide, 3000);
        });
    }

    // 隐藏的函数
    function hide() {
        $("#ad").hide(3000);
    }

    setTimeout(show, 3000);
</script>
</html>

2.表格的隔行换色与复选框全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>隔行换色</title>
    <style>
        .greenStyle {
            background-color: lawngreen;
        }
        .blueStyle {
            background-color: lightskyblue;
        }
        .redStyle {
            background-color: red;
        }
    </style>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<table id="tab1" border="1" width="800" align="center" cellspacing="0">
    <tr>
        <td colspan="5"><input id="unSelectAll" type="button" value="删除" onclick="unSelectAll()"></td>
    </tr>

    <tr style="background-color: #999999;">
        <th><input id="selectAll" type="checkbox" onclick="selectAll(this)"></th>
        <th>分类ID</th>
        <th>分类名称</th>
        <th>分类描述</th>
        <th>操作</th>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelected"></td>
        <td>1</td>
        <td>手机数码</td>
        <td>手机数码类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelected"></td>
        <td>2</td>
        <td>电脑办公</td>
        <td>电脑办公类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelected"></td>
        <td>3</td>
        <td>鞋靴箱包</td>
        <td>鞋靴箱包类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" class="itemSelected"></td>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
</table>
</body>
<script>
    //隔行换色其实就是实线奇偶行的颜色不一样,也就是给奇偶行添加不同的类名
    $("tr:odd").addClass("greenStyle");
    $("tr:even").addClass("blueStyle");

    //当鼠标移入某行的时候,就给该行的背景色变成红色,当鼠标移出某行的时候就将该行的背景色还原
    let className = null;
    //给所有行绑定鼠标移入事件
    $("tr").mouseover(function () {
        className = this.className;
        this.className = "redStyle";
    })
    //给所有行绑定鼠标移出事件
    $("tr").mouseout(function () {
        this.className = className;
    })
    //一、实现全选功能
    function selectAll(obj) {
        $(".itemSelected").prop("checked", obj.checked);
    }
    //二、实现反选功能
    function unSelectAll() {
        // $(".itemSelected").prop("checked",false);
        $(".itemSelected").click();
    }
    // 全选与非全选同步功有
    $(".itemSelected").click(function () {
        $("#selectAll").prop("checked", $(".itemSelected").length == $(".itemSelected:checked").length)
    })

</script>
</html>

3.电子时钟

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>电子时钟案例</title>
    <style>
        div {
            font-size: 30px;
            color: green;
        }
    </style>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<div id="time"></div>
<input type="button" value="开始" onclick="startTime()">
<input type="button" value="暂停" onclick="pauseTime()">
</body>
<script>
    let interval;
    function startTime() {
        clearInterval(interval);
        interval = setInterval(function () {
            $("#time").text(new Date().toLocaleString());
        }, 1000);
    }
    function pauseTime() {
        clearInterval(interval);
    }
</script>
</html>

4.省市联动效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>省市二级联动</title>
    <script src="jq/jquery-3.3.1.min.js"></script>
</head>
<body>
<!--
        给省份的下拉框绑定change事件
    -->
<select id="provinceSelect" onchange="changeProvince(this.value)">
    <option value="0">请选择省份</option>
    <option value="1">广东省</option>
    <option value="2">湖南省</option>
    <option value="3">湖北省</option>
</select>
<select id="citySelect">
    <option>请选择城市</option>
</select>
</body>
<script>
    let cities = [
        [],
        ["广州", "深圳", "惠州", "东莞"],
        ["长沙", "岳阳", "常德", "衡阳"],
        ["武汉", "黄冈", "宜昌", "荆州"]
    ]
    function changeProvince(index) {
        let city = cities[index];
        $("#citySelect").html("<option>请选择城市</option>");
        $.each(city, function (index, element) {
            $("#citySelect").append("<option>" + element + "</option>");
        })
    }
</script>
</html>

三.同步请求与异步请求

1.JavaScript中的同步请求与异步请求

同步请求: 浏览器发出一个请求, 必须等待服务器响应之后才能接着发起下一个请求; (在不使用AJAX的情况下, JavaWeb中请求服务器上的资源一般有超链接标签, form表单提交等方式; )

异步请求: 浏览器发出一个请求, 不必等待服务器响应就可以继续发起下一个请求; 每个请求响应之后, 更新相应的网页区域; (也就是可以控制网页中局部的视图数据显示, 是通过AJAX实现的, 也可以理解为网页的碎片化, 每个碎片之间互不影响)

2.AJAX

Asynchronous Javascript And XML(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术;

传统的网页 (不使用AJAX) 如果需要更新内容,必须重载整个页面; 而AJAX可以使网页面实现异步更新,也就是说可以在不重新加载整个网页的情况下,对网页的局部进行更新;

3.异步get与post请求

3.1 使用JS原始方式

<a href="javascript:;" onclick="fn1()">异步的get请求访问</a><br>
<a href="javascript:;" onclick="fn2()">异步的post请求访问</a><br>
<script>
    //声明一个发送异步请求的方法
    function fn1() {
        //使用js原生的代码发送异步的get请求
        //1. 创建一个ajax引擎对象
        let xhr = new XMLHttpRequest();
        //2. 建立和服务器的连接
        xhr.open("GET","/demo01?username=jay")
        //3. 发送请求
        xhr.send()
        //4. 处理响应
        //也就是怎么展示响应数据: 将响应数据展示到id为msg的div中
        xhr.onreadystatechange = function () {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                //获取响应数据
                var responseText = xhr.responseText;
                //展示响应数据
                document.getElementById("msg").innerHTML = responseText
            }
        }
    }
    
    //声明一个方法发送异步的post请求
    function fn2() {
        //使用js原生的代码发送异步的post请求
        //1. 创建一个ajax引擎对象
        var xhr = new XMLHttpRequest();
        //2. 创建连接
        xhr.open("POST","/demo01")
        //3. 发送请求
        //post请求携带参数之前,先要设置Content-Type请求头,指定请求参数类型
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
        xhr.send("username=jay")
        //4. 处理响应
        xhr.onreadystatechange = function () {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                //获取响应数据
                var responseText = xhr.responseText;
                //展示响应数据
                document.getElementById("msg").innerHTML = responseText
            }
        }
    }
</script>

3.2 使用JQuery方式

请求方式 语法
GET请求 $.get(url, [data], [callback], [type])
POST请求 $.post(url, [data], [callback], [type])
AJAX请求 $.ajax([settings])
参数名称 解释
url 请求的服务器端url地址
data 发送给服务器端的请求参数,格式是key=value
callback 当请求成功后的回掉函数,可以在函数体中编写我们的逻辑代码
type 预期的返回数据的类型(默认为text),取值可以是 xml, html, script, json, text, _defaul等
属性名称 解释
url 请求的服务器端url地址
async (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false
data 发送到服务器的数据,可以是键值对形式,也可以是js对象形式
type (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"
dataType 预期的返回数据的类型,取值可以是 xml, html, script, json, text, _defaul等
success 请求成功后的回调函数
error 请求失败时调用此函数
<script>
    //声明一个方法使用jQuery的ajax方法发送异步get请求
    function fn1() {
        $.get("/demo01?username=tom",function (result) {
            //在这个回调函数中处理响应数据result
            
        },"json")
    }
    
    //声明一个方法使用jQuery的ajax方法发送异步post请求
    function fn2() {
        $.post("/demo01","username=jack",function (result) {
            //在这个回调函数中处理响应数据result
            
        },"json")
    }
    
    //声明一个方法使用JQuery的ajax方法发送异步请求
    function fn3() {
        $.ajax({
            url:"/demo01", //请求路径
            data:"username=lucy", //请求参数
            type:"POST", //请求方式
            success:function (result) {
                //请求成功时候的回调函数
              
            }, 
            error:function () {
                //请求失败时候的回调函数
                
            } 
        })
    }
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342