JQuery使用

JQuery 框架

注意事项

在导入JQUREY外部文件的时候不可以使用自闭合标签。无效化导入且不报错!!

    <!-- <script src="jquery-3.3.1.min.js"></script> -->
    <script src="jquery-3.3.1.min.js"/>  // 不可使用此方式加载

jQuery框架特点:

  1. 免费开源

  2. 轻量级框架:占用资源少,运行速度快

  3. 宗旨:write less do more

    jQuery开发有什么好处?

  4. 提高开发效率

  5. 免费开源

  6. 减少开发工作量

JQuery 格式

入口函数

$(function())的作用

​ 类似于windos.onload,当页面加载完成之后再执行该函数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>与window.onload的区别</title>
    <script src="js/jquery-3.3.1.js"></script>
</head>
<body>
<script type="text/javascript">
    /**
     * jQuery中每个入口函数都会依次执行
     */
    /*$(function () {
        alert("Hello jQuery1");
    });

    $(function () {
        alert("Hello jQuery2");
    });*/

    window.onload = function () {
        alert("Window 1");
    }

    /**
     * 只会执行最后这一次,后面的覆盖前面的
     */
    window.onload = function () {
        alert("Window 2");
    }
</script>
</body>
</html>

jQuery对象与js对象之间的转换

JS对象与jQuery对象的区别

Jquery对象实际上是一个数组类。

​ JS对象:以前通过DOM中方法获得的元素都是JS对象,如:document.getElementById(“id”)

​ jQuery对象:通过jQuery选择器选中元素,就是jQuery对象

为什么要转换?

​ JS对象无法使用JQ对象中方法,如果JS对象需要使用JQ对象中方法,必须将JS对象转成JQ对象,反之亦然。

记忆语法,JQ是升级版 所以 JS—>JQ 要加钱 $(js对象)

​ JS是初级版 所以JQ —>JS要减钱 jq对象[0]

操作方法
将JS对象–>jQuery对象$(JS对象)
将jQuery对象–> JS对象JQ对象[0] 或 JQ对象.get(0)
JQ对象本质上是JS的一个数组对象
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JS对象与JQ对象转换</title>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
</head>
<body>
<h2>JS对象与JQ对象的转换</h2>
<input type="text" id="company" value="传智播客">
<input type="button" id="b1" value="JS得到值">
<input type="button" id="b2" value="JQ得到值">
<script type="text/javascript">
    //使用JS对象的方法
    document.getElementById("b1").onclick = function () {
        //1.得到文本框对象
        let jsObject = document.getElementById("company");   //JS对象
        //2.取出文本框的值
        //let txt = jsObject.value;  //调用js对象的属性或方法

        //将jsObject -> jqObject 转换
        let txt = $(jsObject).val();
        //3.显示出来
        alert(txt);
    }

    //使用JQ对象的方法:按钮2的单击事件
    $("#b2").click(function () {   //回调函数,事件处理函数
        //1.得到文本框对象
        let jqObject = $("#company");  //JQ对象
        //2.取出文本框的值
        //let txt = jqObject.val();       //调用JQ中方法

        //将jq对象->js对象
        let txt = jqObject[0].value;
        //3.显示出来
        alert(txt);
    });
</script>
</body>
</html>

JQ选择器

选择器的作用

如果要操作网页中各种元素,首先要选中这些元素。jQuery中的选择器功能强大,选择方式灵活多样。

jQuery常用的选择器有如下:

  1. 基本选择器

  2. 层级选择器

  3. 过滤选择器

  4. 表单过滤选择器

基本选择器

注:所有的选择器外面都要使用 钱$(""),如:ID选择器 $("#ID")

有以下单不限于。css中的所有基本选择器都可以用。

基本选择器语法
ID选择器#ID
类选择器.类名
标签选择器标签名
<!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 type="text/javascript" src="js/jquery-3.3.1.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>
</head>
<body>
<input type="button" value="改变 id 为 one 的元素的背景色为 红色" id="b1"/>
<input type="button" value=" 改变元素名为 <div> 的所有元素的背景色为 红色" id="b2"/>
<input type="button" value=" 改变 class 为 mini 的所有元素的背景色为 红色" id="b3"/>

<h1>有一种奇迹叫坚持</h1>
<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 动画
</div>

<span class="spanone">class为spanone的span元素</span>
<span class="mini">class为mini的span元素</span>
</body>


<script type="text/javascript">
    // 1) 改变 id 为one的元素的背景色为红色
    $("#b1").click(function () {
        //css方法("样式名","值"),修改行内样式
        $("#one").css("background-color", "red");
    });

    // 2) 改变元素名为 <div> 的所有元素的背景色为 红色。
    $("#b2").click(function () {
        /*
        标签选择器,选中所有的div
        jquery几乎所有的方法,都支持直接操作一个集合
         */
        $("div").css("background-color", "red");
    });

    // 3) 改变 class 为 mini 的所有元素的背景色为 红色
    $("#b3").click(function () {
        //样式名可以写成:background-color,也可以写成backgroundColor
        $(".mini").css("backgroundColor", "red");
    });
</script>
</html>

层级选择器

层级选择器语法
获取A元素内部所有B元素,B是A的子孙元素A B
获得A元素下面的所有B子元素A>B
获得A元素同级,下一个B元素。(B和A是兄弟关系,A是老二,B是老三)A+B
获取A元素后面所有同级B元素。(B是A后面所有的兄弟,得到一个集合)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 type="text/javascript" src="js/jquery-3.3.1.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>
</head>

<body>
<input type="button" value="改变 <body> 内所有 <div> 的背景色为红色" id="b1"/>
<input type="button" value="改变 <body> 内子 <div> 的背景色为 红色" id="b2"/>
<input type="button" value="改变 id为two的下一个div兄弟元素的背景色为红色" id="b3"/>
<input type="button" value="改变id为two的后面同级兄弟div元素的背景色为红色" id="b4"/>
<h1>有一种奇迹叫坚持</h1>
<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>

<script type="text/javascript">
    //1) 改变 <body> 内所有 <div> 的背景色为红色,子孙都算
    $("#b1").click(function () {
        $("body div").css("background-color", "red");
    });

    //2) 改变 <body> 内子 <div> 的背景色为 红色
    $("#b2").click(function () {
        $("body>div").css("background-color", "red");
    });

    //3) 改变 id为two的下一个div兄弟元素的背景色为红色
    $("#b3").click(function () {
        $("#two+div").css("background-color", "red");
    });
	
	//4) 改变id为two的后面同级兄弟div元素的背景色为红色
	 $("#b4").click(function () {
         $("#two~div").css("background-color", "red");
     });
</script>
</html>

过滤选择器

什么是过滤选择器

​ 在现有已经选择的元素基础之上,再次进行过滤,得到剩下的元素。类似于CSS中伪类选择器语法

语法

返回的都是数组,数组中每个元素都是js对象。

基本过滤选择器语法
获得选择的元素中的第一个元素:first
获得选择的元素中的最后一个元素:last
不包括指定内容的元素:not()
偶数,从 0 开始计数:even
奇数,从 0 开始计数:odd
等于第几个 equals:eq()
大于第n个,不含第index个:gt()
小于第n个,不含第index个:lt()

案例演示

<!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 type="text/javascript" src="js/jquery-3.3.1.js"></script>
	<style type="text/css">
			table {
				margin: auto;
				border-collapse: collapse;
				width: 525px;
			}
			
			tr {
				height: 30px;
				text-align: center;
			}
			
			.girl {
				width: 260px;
				height: 260px;
				border: 1px solid gray;
				float: left;
			}
	 </style>
	</head>
  <body>
		 <input type="button" value="第一行的背景色为浅灰色"  id="b1"/>
		 <input type="button" value="最后一行的背景色为浅绿色"  id="b2"/>
		 <input type="button" value="除第1行和最后1行的其它行背景色为浅黄色"  id="b3"/>
		 <input type="button" value="索引值为偶数的行背景色为浅粉色"  id="b4"/>
		 <input type="button" value="索引值为奇数的行背景色为aquamarine色"  id="b5"/>
		 <input type="button" value="索引值大于 3 的tr元素的背景色为oldlace色"  id="b6"/>
		 <input type="button" value="索引值等于 3 的tr元素的背景色为antiquewhite"  id="b7"/>
		 <input type="button" value="索引值为小于 3 的tr元素背景色为yellowgreen"  id="b8"/>
		<hr />
		<div style="width: 525px; margin: auto;">
		<table border="1" align="center">
				<caption><h3>学生信息列表</h3></caption>
				<tr>
					<th>学号</th>
					<th>姓名</th>
					<th>性别</th>
					<th>年龄</th>
					<th>家庭住址</th>
					<th>成绩</th>
				</tr>
				<tr>
					<td>1001</td>
					<td>孙悟空</td>
					<td></td>
					<td>72</td>
					<td>花果山</td>
					<td>90</td>
				</tr>
				<tr>
					<td>1002</td>
					<td>猪八戒</td>
					<td></td>
					<td>36</td>
					<td>高老庄</td>
					<td>78</td>
				</tr>
				<tr>
					<td>2002</td>
					<td>沙僧</td>
					<td></td>
					<td>30</td>
					<td>流沙河</td>
					<td>67</td>
				</tr>
				<tr>
					<td>3000</td>
					<td>唐三藏</td>
					<td></td>
					<td>26</td>
					<td>东土</td>
					<td>87</td>
				</tr>
				<tr>
					<td>4000</td>
					<td>白骨精</td>
					<td></td>
					<td>18</td>
					<td>白骨洞</td>
					<td>96</td>
				</tr>
				<tr>
					<td>5000</td>
					<td>蜘蛛精</td>
					<td></td>
					<td>17</td>
					<td>盘丝洞</td>
					<td>95</td>
				</tr>
				<tr>
					<td>总成绩</td>
					<td colspan="5">3045</td>
				</tr>
		</table>
		</div>
		<br />
	</body>
	
	<script type="text/javascript">
	//1) 改变第一行的背景色为浅灰色
    $("#b1").click(function () {
        //标签选择器,过滤得到第0元素
        $("tr:first").css("backgroundColor", "lightgreen");
    });

	//2) 改变最后一行的背景色为浅绿色
    $("#b2").click(function () {
        $("tr:last").css("backgroundColor", "lightgreen");
    });

	//3) 改变除第1行和最后1行的其它行背景色为浅黄色
    $("#b3").click(function () {
        $("tr:not(:first):not(:last)").css("backgroundColor", "lightgreen");
    });

	//4) 改变索引值为偶数的行背景色为浅粉色,下标从0开始
    $("#b4").click(function () {
        //注:从0开始算
        $("tr:even").css("backgroundColor", "lightgreen");
    });

	//5) 改变索引值为奇数的行背景色为aquamarine色
    $("#b5").click(function () {
        $("tr:odd").css("backgroundColor", "lightgreen");
    });

	//6) 改变索引值大于 3 的tr元素的背景色为oldlace色
    $("#b6").click(function () {
        //注:从0开始
        $("tr:gt(3)").css("backgroundColor", "lightgreen");
    });

	//7) 改变索引值等于 3 的tr元素的背景色为antiquewhite
    $("#b7").click(function () {
        $("tr:eq(3)").css("backgroundColor", "lightgreen");
    });

	//8) 改变索引值为小于 3 的tr元素背景色为yellowgreen
    $("#b8").click(function () {
        $("tr:lt(3)").css("backgroundColor", "lightgreen");
    });
	</script>
</html>

表单过滤选择器

表单属性选择器语法
可用:enabled
不可用:disabled
选中(单选radio ,多选checkbox):checked
选择(下列列表<select>中的<option>):selected

注:表单过滤选择器用于表单中元素。可以使用length的属性获取该选择数组的长度。只有单选框和复选框有checked属性。

<!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 type="text/javascript" src="js/jquery-3.3.1.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>
	</head>

	<body>
		<input type="button" value="val() 方法改变表单内可用文本框元素的值" id="b1" />
		<input type="button" value="val() 方法改变表单内不可用 <input> 元素的值" id="b2" />
		<input type="button" value="length 属性获取(单选和多选)选框选中的个数" id="b3" />
		<input type="button" value="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>
        <!--multiple表示多选-->
		<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>

	</body>

	<script type="text/javascript">
        //1) val() 方法改变表单内可用文本框 <input> 元素的值
        $("#b1").click(function () {
            //val()作用,相当于value属性,既可设置值,也可以获取值
            $("input[type=text]:enabled").val("天气不错");
        });

        //2) val() 方法改变表单内不可用 <input> 元素的值
        $("#b2").click(function () {
            $("input[type=text]:disabled").val("天气不错");
        });

        //3) length 属性获取选框选checked中的个数
        $("#b3").click(function () {
            //JQ对象本质是一个数组,就可以通过length属性得到它的长度。只有单选框和复选框有checked属性
            alert($("input:checked").length);
        });

        //4) length 属性获取下拉列表选中的个数
        $("#b4").click(function () {
            alert($("option:selected").length);
        });

	</script>
</html>

注意:如果使用属性选择器那么只能取出已经在标签中已经存在的属性,如果遇到disabled、selected等有默认值的属性取不出值。会显示undefined,但是默认的属性是生效的。

<td><input type="checkbox" class="item"></td> 
console.log($("input[type=checkbox]").attr("checked"));  //打印undefined

事件

事件处理函数的命名

所有的事件处理函数前面都没有on

jQuery中常用的事件

事件方法功能
blur()失去焦点
change()改变事件
click()单击事件
dblclick()双击事件
focus()得到焦点
keydown()键盘按下
keyup()松开键盘
mouseover()鼠标移上
mouseout()鼠标移出
submit()表单提交
scroll()滚轮滑动

事件方法使用示例

输入框的改变
  1. 文本框得到焦点和失去焦点分别显示不同的背景色
  2. 松开按键,将字母转成大写,再显示在文本框中
  3. 使用链式写法实现相同的功能
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多个事件的写法</title>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
    <script type="text/javascript">
        /*
         1. 文本框得到焦点和失去焦点分别显示不同的背景色
         2. 松开按键,将字母转成大写,再显示在文本框中
         3. 使用链式写法实现相同的功能*/
        $(function () {
            /*
            //得到焦点
            $("#t1").focus(function () {
                // $("#t1").css("background-color", "yellow");
                //this是一个js对象,使用jq的方法必须转换
                $(this).css("background-color", "yellow");
            });

            //失去焦点
            $("#t1").blur(function () {
                $("#t1").css("background-color", "lightgreen");
            });

            //松开按钮
            $("#t1").keyup(function () {
                //转成大写以后再赋值给自己
                $("#t1").val($("#t1").val().toUpperCase());
            });
             */

            //得到焦点
            $("#t1").focus(function () {
                $(this).css("background-color", "red");
            }).blur(function () {   //失去焦点
                $("#t1").css("background-color", "blue");
            }).keyup(function () {  //松开按钮
                $("#t1").val($("#t1").val().toUpperCase());  //转成大写以后再赋值给自己
            });
        })
    </script>
</head>
<body>
用户名:
<input type="text" id="t1" />
</body>

</html>
表单项的效果显示
  1. 实现全选全不选的效果
  2. 实现全选全不选的效果
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>隔行换色/全选全不选</title>
    <style type="text/css">
        table {
            border-collapse: collapse;
        }

        tr {
            height: 35px;
            text-align: center;
        }

        a:link {
            text-decoration: none;
        }
    </style>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
    <script type="text/javascript">
        $(function () {
            //隔行变色,除了第1行之外,even表示偶数行,剩下的行中偶数行
            $("tr:gt(0):even").css("background-color", "lightgreen");
            $("tr:gt(0):odd").css("background-color", "lightyellow");

            //全选,全不选
            $("#all").click(function () {  //最上面的复选框点击事件
                //得到all的值是true或是false
                //选中所有下面的checkbox
                $("input[name=item]").prop("checked", $("#all").prop("checked"));    //设置boolean类型的属性
            });
        })
    </script>
</head>
<body>
<table id="tab1" border="1" width="700" align="center">
    <tr style="background-color: #999999;">
        <td><input type="checkbox" id="all"></td>
        <td>分类ID</td>
        <td>分类名称</td>
        <td>分类描述</td>
        <td>操作</td>
    </tr>
    <tr>
        <td><input type="checkbox" name="item"></td>
        <td>1</td>
        <td>手机数码</td>
        <td>手机数码类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" name="item"></td>
        <td>2</td>
        <td>电脑办公</td>
        <td>电脑办公类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" name="item"></td>
        <td>3</td>
        <td>鞋靴箱包</td>
        <td>鞋靴箱包类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" name="item"></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>
    <style type="text/css">
        table {
            width: 400px;
            border-collapse: collapse;
            margin: auto;
        }

        td,th {
            text-align: center;
            height: 30px;
        }

        .container {
            width: 400px;
            margin: auto;
            text-align: right;
        }

        img {
            width: 100px;
            height: 100px;
        }

        th {
            background-color: lightgray;
        }

        tr:hover {
            background-color: lightyellow;
        }
    </style>
    <script type="text/javascript" src="js/jquery-3.3.1.js" ></script>
    <script type="text/javascript">
        //添加到购物车的点击事件
        function addRow() {
            //1.获取文本框中内容
            let val = $("#pname").val().trim();   //去掉前后的空格
            if (val == "") {  //注:不同于Java
                alert("商品名字不能为空");
                //让文本框获得焦点
                $("#pname").focus();
                return;
            }
            //2.创建tr
            let tr = "<tr>" +
                "<td><img src=\"img/girl.jpg\" /></td>" +
                "<td>" + val + "</td>" +
                "<td><input type=\"button\" value=\"删除\" οnclick=\"deleteRow(this)\"></td>" +
                "</tr>";
            //3.创建好的tr的放到父元素tbody中
            $("#cart").append(tr);
            //4.清空文本框内容
            $("#pname").val("");
        }

        //删除一行
        function deleteRow(obj) {   //obj其实就是一个按钮对象,这是JS对象,转成JQ对象
            if (confirm("真的要从购物车中移除这件商品吗?")) {
                //按钮的父元素->td  的父元素 -> tr  删除tr即可
                $(obj).parent().parent().remove();   //自己删除自己
            }
        }
    </script>
</head>

<body>
<div class="container">
    <table border="1">
        <tbody id="cart">
        <tr>
            <th>
                图片
            </th>
            <th>
                商品名
            </th>
            <th>
                操作
            </th>
        </tr>
        <tr>
            <td><img src="img/sx.jpg" /></td>
            <td>
                三星Note7
            </td>
            <td>
                <!--this表示当前按钮-->
                <input type="button" value="删除" onclick="deleteRow(this)">
            </td>
        </tr>
        </tbody>
    </table>
    <br />
    商品名:
    <input type="text" id="pname" value="" />&nbsp;
    <input type="button" value="添加到购物车" onclick="addRow()" />
</div>
</body>
</html>

事件的绑定和解绑

// 给按钮1绑定点击事件
$body.on("click", "#btn1",  btnClick1);
function btnClick1() {
}

// 移除按钮1的点击事件
$body.off("click", "#btn1");

//错误:选择器不一致,无法解除绑定
$body.off("click", ":button"); 

注意:在解绑时,如果不写事件,那么默认该对象的所有事件都解绑

使用JQ遍历

注意:无论使用哪一种遍历方式,取出的元素都是JS对象,在回调函数中使用,要注意响应端是否是application/json否则无效

下面展示了总共四种。一般使用第四种。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>遍历</title>
</head>
<body>
    <input type="button" id="btn" value="遍历列表项">
    <ul>
        <li>传智播客</li>
        <li>黑马程序员</li>
        <li>传智专修学院</li>
    </ul>
</body>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
    //方式一:传统方式
  
    // $("#btn").click(function(){
    //     let lis = $("li");
    //     for(let i = 0 ; i < lis.length; i++) {
    //         alert(i + ":" + lis[i].innerHTML);
    //     }
    // });
  


    //方式二:对象.each()方法

    // $("#btn").click(function(){
    //     let lis = $("li");
    //     lis.each(function(index,ele){
    //         alert(index + ":" + ele.innerHTML);
    //     });
    // });
   

    //方式三:$.each()方法

    $("#btn").click(function(){
        let lis = $("li");
        $.each(lis,function(index,ele){
            alert(index + ":" + ele.innerHTML);
        });
    });
 

    //方式四:for of 语句遍历
    $("#btn").click(function(){
        let lis = $("li");
        for(ele of lis){
            alert(ele.innerHTML);
        }
    });
</script>
</html>

BOM

html(),text(),val()

操作方法的特点:所有的方法既可以设置值(set),又可以获取值(get)

html() 类似于以前innerHTML,修改或获取元素内部的HTML的内容,标签是起作用的。
text() 类似于以前的innerText,标签是不起作用的
val() 类似于以前的value属性,设置或获取值。如:val("值")设置值   val()获取值
<!DOCTYPE html>
<html>
<head>
    <title>html和text和val</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>

</head>
<body>
<input type="button" id="b1" value="设置值value"/>
<input type="button" id="b2" value="获取值value"/>
<input type="button" id="b3" value="设置html"/>
<input type="button" id="b4" value="获取值html"/>
<input type="button" id="b5" value="设置text"/>
<input type="button" id="b6" value="获取text"/>
<hr/>

<input id="myinput" type="text" name="username" value="张三"/><br/>
<div id="mydiv"><p><a href="#">标题标签</a></p></div>
</body>
<script type="text/javascript">
    $("#b1").click(function () {
        //有参数就是设置值value
        $("#myinput").val("李四");
    });
    
    $("#b2").click(function () {
        //不带参数就是获取值
        alert($("#myinput").val());
    });

    //设置html
    $("#b3").click(function () {
        //有参数是设置值
        $("#mydiv").html("<h1 style='color: red'>寡妇追日</h1>");
    });

    //获取值html
    $("#b4").click(function () {
        alert($("#mydiv").html());
    });

    //设置text
    $("#b5").click(function () {
        $("#mydiv").text("<h1 style='color: red'>寡妇追日</h1>");
    });

    //获取text
    $("#b6").click(function () {
        alert($("#mydiv").text());
    });
</script>
</html>

属性修改方法

attr()、removeAttr()、prop()、removeProp()方法的使用

attr() 修改,添加或获取元素的属性。
	attr("属性名","值") 如果属性名不存在就是添加,如果存在就是修改。两个参数是添加或修改
	attr("属性名") 一个参数就是获取属性的值
prop() 修改,添加或获取元素的属性。
	prop("属性名","值") 如果属性名不存在就是添加,如果存在就是修改。两个参数是添加或修改
	prop("属性名") 一个参数就是获取属性的值
removeAttr(),removeProp() 删除指定的属性
	jq对象.removeAttr("src")
	jq对象.removeProp("href")

什么时候使用attr()和prop()

如果属性值是true或false,建议使用prop(),编程更加方便

在这里插入图片描述

<!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 type="text/javascript" src="js/jquery-3.3.1.js"></script>
</head>

<body>
<input type="button" id="b1" value="获取北京节点的name属性值"/>
<input type="button" id="b2" value="设置北京节点的name属性的值为dabeijing"/>
<input type="button" id="b3" value="新增北京节点的discription属性 属性值是didu"/>
<input type="button" id="b4" value="删除北京节点的name属性"/>
<input type="button" id="b5" value="获得hobby的选中状态"/>

<ul>
    <li id="bj" name="beijing">北京</li>
    <li id="tj" name="tianjin">天津</li>
</ul>
爱好:<input type="checkbox" id="hobby" value="游泳"/>游泳

</body>

<script type="text/javascript">
    //获取北京节点的name属性值
    $("#b1").click(function () {
        alert($("#bj").attr("name"));
    });

    //设置北京节点的name属性的值为"首都"
    $("#b2").click(function () {
        $("#bj").attr("name", "首都");
    });

    //新增北京节点的discription属性 属性值是didu
    $("#b3").click(function () {
        $("#bj").attr("discription", "帝都");
    });

    //删除北京节点的name属性
    $("#b4").click(function () {
        $("#bj").removeAttr("name");
    });

    //获得hobby的选中状态
    $("#b5").click(function () {
        //用于boolean类型的属性操作
        alert($("#hobby").prop("checked"));
    });
</script>

</html>

注:当使用attr方法对样式style属性进行修改时,值为整个样式。并非单个。

attr("style","backgound:color;automat:auto;checked:checked");

样式的方法

方法名功能
addClass(类样式名)添加类样式 可以添加一个或多个
removeClass(类样式名)移除类样式,让类样式不起作用
toggleClass(类样式名)切换类样式,如果有这个class名就移除,如果没有就添加
css(样式名)获取指定样式值
css(样式名,样式值)设置指定的样式

js的样式修改

元素.style.样式名=样式值
元素.className=类名

注意: 当使用类样式时,必须在style标签中有对应的类样式

<!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 type="text/javascript" src="js/jquery-3.3.1.js"></script>
	<style type="text/css">
		   .one{
			    width: 200px;
			    height: 140px;
			    margin: 20px;
			    background: red;
			    border: #000 1px solid;
				float:left;
			    font-size: 17px;
			    font-family:Roman;
			}
		
		 	div{
			    width: 140px;
			    height: 140px;
			    margin: 20px;
			    background: #9999CC;
			    border: #000 1px solid;
				float:left;
			    font-size: 17px;
			    font-family:Roman;
			}
			
			/*待用的样式*/
			.second{
				width: 222px;
			    height: 220px;
			    margin: 20px;
			    background: yellow;
			    border: pink 3px dotted;
				float:left;
			    font-size: 22px;
			    font-family:Roman;
			}
	 </style>
	</head>
	 
	<body>
		 <input type="button" value="采用属性增加样式(改变id=one的样式)"  id="b1"/>
		 <input type="button" value=" addClass"  id="b2"/>
		 <input type="button" value="removeClass"  id="b3"/>
		 <input type="button" value=" 切换样式"  id="b4"/>
		 <input type="button" value=" 通过css()获得id为one背景颜色"  id="b5"/>
 		 <input type="button" value=" 通过css()设置id为one背景颜色为绿色"  id="b6"/>
		 <hr/>
		
		 <h1>有一种奇迹叫坚持</h1>
		 <h2>自信源于努力</h2>
		 
	     <div id="one" class="aaa">
	    	 id为one 
		 </div>
		
	</body>
	
	<script type="text/javascript">
		// 采用属性增加样式(改变id=one的样式),样式名为second
        $("#b1").click(function () {
            //会覆盖之前的属性
            $("#one").attr("class", "second");
        });

		// addClass
        $("#b2").click(function () {
            //不会覆盖原来的类,只是追加新的类
            $("#one").addClass("second");
        });

		// removeClass
        $("#b3").click(function () {
            //移除一个类
            $("#one").removeClass("second");
        });
        
		// 切换样式
        $("#b4").click(function () {
            //有就是移除,没有就是添加
            $("#one").toggleClass("second");
        });
        
		// 通过css()获得id为one背景颜色
        $("#b5").click(function () {
            //1个参数是获取样式值
            alert($("#one").css("background-color"));
        });
        
 		// 通过css()设置id为one背景颜色为绿色
        $("#b6").click(function () {
            //2个参数是设置样式值
            $("#one").css("background-color", "green");
        });
	</script>
   
</html>

元素的创建和添加

$("标签内容") 创建一个元素
父元素.append(子元素) 添加到最后一个子元素,与js中appendChild()相同
父元素.prepend(子元素) 添加到第一个子元素
元素.before(元素) 添加到当前元素的前面,这两个元素是兄弟关系
元素.after(元素) 添加到当前元素的后面,这两个元素是兄弟关系
<!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 type="text/javascript" src="js/jquery-3.3.1.js"></script>
</head>

<body>
<input type="button" id="b1" value="将反恐放置到city的后面"/>
<input type="button" id="b2" value="将反恐放置到city的最前面"/>
<input type="button" id="b3" value="将反恐放在天津前面"/>
<input type="button" id="b4" value="将反恐放在天津后面"/>
<input type="button" id="b5" value="创建一个广州的节点"/>
<hr/>

<ol id="city">
    <li id="bj" name="beijing">北京</li>
    <li id="tj" name="tianjin">天津</li>
    <li id="cq" name="chongqing">重庆</li>
</ol>

<ul id="game">
    <li id="fk" name="fankong">反恐</li>
    <li id="xj" name="xingji">星际</li>
</ul>
</body>

<script type="text/javascript">
    //将反恐放置到city的后面
    $("#b1").click(function () {
        //注:append还有剪切的功能
        //$("#city").append($("#fk"));

        //复制的功能,克隆。主操作方是父元素
        //$("#city").append($("#fk").clone());

        //子元素向父元素中追加,主操作方是子元素
        $("#fk").appendTo($("#city"));
    });

    //将反恐放置到city的最前面
    $("#b2").click(function () {
        //也有prependTo()这个方法
        $("#city").prepend($("#fk"));
    });

    //将反恐放在天津前面
    $("#b3").click(function () {
        //两者是兄弟关系
        $("#tj").before($("#fk"));
    });

    //将反恐放在天津后面
    $("#b4").click(function () {
        $("#tj").after($("#fk"));
    });

    //创建一个广州的节点,加到城市中:<li id="gz" name="guangzhou">广州</li>
    $("#b5").click(function () {
        //创建元素
        //let gz = $("<li id=\"gz\" name=\"guangzhou\">广州</li>");
        //$("#city").append(gz);
        //直接使用字符串,append会将字符串创建成一个元素
        $("#city").append("<li id=\"gz\" name=\"guangzhou\">广州</li>");
    });
</script>

</html>

元素的删除

元素.remove()  删除本身
父元素.empty() 父元素清空所有的子元素,父元素还在
<!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 type="text/javascript" src="js/jquery-3.3.1.js"></script>
	</head>
	 
	<body>
	   <input type="button" id="b1" value="从city中删除北京" />
       <input type="button" id="b2" value="删除city中所有的子节点" />
	   <hr/>
		 <ol id="city">
		 	 <li id="bj" name="beijing">北京</li>
			 <li id="tj" name="tianjin">天津</li>
			 <li id="cq" name="chongqing">重庆</li>
		 </ol>
	</body>
	
	<script type="text/javascript">
	   //从city中删除<li id="bj" name="beijing">北京</li>节点
       $("#b1").click(function () {
           $("#bj").remove();  //删除自己
       });

	   //删除city中所有的子节点,观察city本身有没有删除
       $("#b2").click(function () {
           $("#city").empty();  //清空
       });
	</script>
   
</html>

动画方法

动画效果可以在括号中指定毫秒值
show()		显示  
hide()		隐藏  
fadeIn()    淡入
fadeOut()   淡出
slideDown() / slideUp() 下滑和上滑


  //$("#girl").css("display", "none");   也可以使用attr进行修改style样式。
在css的style属性中有display的一个值可以指定为  none 不显示   block 显示

AJAX

同步和异步的区别

  • 同步方式:正常情况下,浏览器与服务器之间是串行操作,类似于一个Java线程的操作。

  • 异步方式:浏览器与服务器是并行操作,类似于Java中多个线路同时工作。

即浏览器后台发送数据给服务器,不是通过表单去提交数据给服务器。

用户在前台还是可以继续工作,用户感觉不到浏览器已经将数据发送给了服务器,并且服务器也已经返回了数据。

ajax使用的技术

  1. JavaScript:用于后台发送数据给服务器,并且对服务器返回的结果进行处理
  2. XML:用于接收服务器返回的数据,但是已经被JSON格式代替。

3.0以前的$.get()和$.post()方法的使用

$.get()

$.post()

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户是否存在</title>
    <script src="js/jquery-3.3.1.js"></script>
</head>
<body>
用户名:<input type="text" id="user"> <span id="info"></span>
<script type="text/javascript">
    /*
    用户注册时输入一个用户名,失去焦点以后,通过ajax后台判断用户名是否存在。
    服务器先不访问数据库,直接判断用户名,如果用户名为newboy,则表示用户已经存在,否则用户名可以注册使用。

    $.get(url,data,callback,type)  $.post(url,data,callback,type)
    只有第1个是必须的选项
    1. url: 表示请求服务器地址
    2. data: 发送给服务器的数据
        格式1:键1=值2&键2=值2
        格式2:{键:值,键:值}
    3. callback:回调函数,参数是服务器返回的数据
    4. type:从服务器返回的数据类型,默认是字符串类型
        取值:xml, html, script, json, text
    */
    //用户名的改变事件
    $("#user").change(function () {
        //访问服务器获取数据,参数是服务器返回的数据,返回的类型是json格式
        $.get("json/users.json", function (users) {
            //判断用户名是否存在
            let user = $("#user").val();  //得到文本框的值
            //1.设置标记
            let exists = false;
            //2.遍历数组,查找名字是否存在
            for (let u of users) {
                if (u == user) {
                    exists = true;  //找到
                    break;
                }
            }
            //3.根据查找的结果显示信息
            if (exists) {  //用户存在
                $("#info").text("用户名已经存在");
            }
            else {
                $("#info").text("恭喜可以注册");
            }
        },"json");
    });
</script>
</body>
</html>

AJAX方法的使用

ajax是通用,默认是get方法

$.ajax({键:值,键:值}) 属性名称解释
url服务器访问地址
async默认是异步,取值是true,设置为false表示同步
methodGET或POST方法
data发送给服务器的数据,2种格式:
1. 键=值&键=值
2. {键:值, 键:值}
dataType服务器返回的数据类型
取值:xml, html, script, json, text
success服务器正常响应的回调函数,参数就是服务器返回的数据
error服务器出现异常的回调函数,参数是XMLHttpRequest对象
$.ajax
{
  url: 访问地址
  data: 发送数据
  async: 同步或异步
  dataType: 服务器返回的数据类型
  success: 服务器正常响应的回调函数,参数:就是服务器返回的数据
  error: 服务器出现异常回调函数,参数:XMLHttpRequest对象
}
以后常用的是以下三个属性:
url, data, success
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
    <script src="js/jquery-3.3.1.js"></script>
</head>
<body>
<h2>用户登录</h2>
<form id="loginForm">
    <table>
        <tr>
            <td>用户名</td>
            <td><input type="text" name="username" id="username"/></td>
        </tr>
        <tr>
            <td>密码</td>
            <td><input type="password" name="password" id="password"/></td>
        </tr>
        <tr>
            <!--登录按钮是一个普通按钮-->
            <td colspan="2" align="center"><input type="button" value="登录" id="btnLogin"/></td>
        </tr>
    </table>
</form>

<script type="text/javascript">
    /*
     $.ajax({键:值,键:值})
         url : 服务器访问地址
         async  :默认是异步,取值是true,设置为false表示同步
             异步:不会等服务器处理完,会一直向后执行
             同步:等服务器处理完毕,才执行后面的JS代码

         method: GET或POST方法,默认是get方法
         data : 发送给服务器的数据,2种格式:1. 键=值&键=值 2. {键:值, 键:值}
         dataType  : 服务器返回的数据类型<br />取值:xml, html, script, json, text
         success   :  服务器正常响应的回调函数,参数就是服务器返回的数据
         error   :     服务器出现异常的回调函数,参数是XMLHttpRequest对象
     */
    //登录按钮的点击事件
    $("#btnLogin").click(function () {
        //1.获取用户输入的用户名和密码
        let username = $("#username").val();
        let password = $("#password").val();
        //2.使用$.ajax访问服务器
        $.ajax({
            url: "json/login.json",
            data: "a=1&b=2",        //发送的数据,可以在浏览器上按f12,选network可以看到
            //async: false,   //默认是true,表示异步
            //服务器正常响应的回调函数,参数就是返回的用户数据
            success: function (users) {
                let exists = false;
                //遍历数组中每个用户
                for (let user of users) {
                    //比较用户名和密码是否相同
                    if (user.name == username && user.password == password) {
                        exists = true;
                        break;
                    }
                }
                //输出登录成功或失败
                if (exists) {
                    alert("登录成功,欢迎您:" + username);
                }
                else {
                    alert("登录失败,请重试");
                }
            },
            dataType: "json",   //指定返回数据类型是json
            error: function (request) {  //出现异常回调函数,参数是XMLHttpRequest对象
                alert("服务器出现异常,状态码是:" + request.status);
            }
        });

        //alert("浏览器端的代码继续执行");  //不会等服务器处理完,会一直向后执行
    });
</script>
</body>
</html>

get和post的区别: 一个会把参数显示在地址栏,一个是在请求信息当中传递。

案例:输入自动补全

[
  "张三",
  "李四",
  "王五",
  "赵六",
  "田七",
  "孙八",
  "张三丰",
  "张无忌",
  "李寻欢",
  "王维",
  "李白",
  "杜甫",
  "李贺",
  "李逵",
  "宋江",
  "王英",
  "鲁智深",
  "武松",
  "张薇",
  "刘小轩",
  "刘浩宇",
  "刘六"
]
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>自动完成</title>
    <style type="text/css">
        .content {
            width: 400px;
            margin: 30px auto;
            text-align: center;
        }

        input[type='text'] {
            box-sizing: border-box;
            width: 280px;
            height: 30px;
            font-size: 14px;
            border: 1px solid #38f;
        }

        input[type='button'] {
            width: 100px;
            height: 30px;
            background: #38f;
            border: 0;
            color: #fff;
            font-size: 15px;
        }

        #show {
            box-sizing: border-box;
            position: relative;
            left: 7px;
            font-size: 14px;
            width: 280px;
            border: 1px solid dodgerblue;
            text-align: left;
            border-top: 0;
            /*一开始是隐藏不可见*/
            display: none;
        }

        #show div {
            padding: 4px;
            background-color: white;
        }

        #show div:hover {
            /*鼠标移上去背景变色*/
            background-color: #3388ff;
            color: white;
        }
    </style>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
</head>
<body>
<div class="content">
    <img alt="传智播客" src="img/logo.png"><br/><br/>
    <input type="text" name="word" id="word">
    <input type="button" value="搜索一下">
    <div id="show"></div>
</div>

<script type="text/javascript">
    /*
    alert(event.keyCode);  //keyCode键盘码表,每个按键都会对应一个号码
     */
    //不能使用change事件,因为change要失去焦点才激活,只要松开任何一个键就激活
    $("#word").keyup(function () {
        //判断文本框中是否有数据,如果不为空,才继续,去掉前后空格
        let word = $("#word").val().trim();
        if (word == "") {
            //如果文本框中没有内容,也要隐藏div
            $("#show").hide();
            return;  //不再继续
        }
        //表示有数据的,开始访问服务器
        $.get({
            url: "json/search.json",  //服务器的访问地址
            success: function (users) {  //返回服务器上所有的数据
                //使用正则表达式,只保留指定字符串开头的用户名
                let reg = new RegExp("^" + word);
                //创建一个数组,用来保存所有以word开头的用户
                let arr = new Array();
                //遍历整个数组
                for (let user of users) {
                    //判断每个字符串是否匹配正则表达式
                    if (reg.test(user)) {
                        arr.push(user);  //添加到数组中
                    }
                }

                //把arr数组显示在div中
                //先判断数组中是否有元素,有元素才显示
                if (arr.length > 0) {
                    //拼接字符串
                    let html="";
                    for (let name of arr) {
                        html+="<div>" + name + "</div>";
                    }
                    //放在#show的div中
                    $("#show").html(html);  //括号中是一个变量名html
                    //显示div
                    $("#show").show();

                    //如果点击每个小的div,就把div中文本赋值给文本框的value
                    $("#show div").click(function () {
                        //this相当于你点击的那个div
                        $("#word").val($(this).text());
                        //隐藏大的div
                        $("#show").slideUp("normal");  //加个动画 
                    });
                }
                else {  //没有元素隐藏div
                    $("#show").hide();
                }
            }
        });
    });
</script>
</body>
</html>

案例:瀑布刷新显示

知识点:

DOM的方法

页面总高度

可视区域高度

已滑动高度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
    <script src="js/jquery-3.3.1.min.js"></script>
    <link rel="stylesheet" href="css/tt.css">
</head>
<body>
<div class="top">
    <span class="top-left">下载APP</span>
    <span class="top-left"> 北京         晴天</span>
    <span class="top-right">更多产品</span>
</div>

<div class="container">

    <div class="left">
        <a>
            <img src="img/logo.png"><br/>
        </a>

        <ul>
            <li>
                <a class="channel-item active" href="#">
                    <span>
                        推荐
                    </span>
                </a>
            </li>

            <li><a class="channel-item" href="#">
                <span>
                    视频
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    热点
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    直播
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    图片
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    娱乐
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    游戏
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    体育
                </span>
            </a></li>

        </ul>

    </div>
    <div class="center">
        <ul class="news_list">
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实11”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实22”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实33”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实44”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实55”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实66”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实77”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实88”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实99”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实1010”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实1010”
                        <hr>
                    </a>
                </div>
            </li>
            <li>
                <div class="title-box">
                    <a href="#" class="link">
                        奥巴马罕见介入美国2020大选,警告民主党参选人须“基于现实1010”
                        <hr>
                    </a>
                </div>
            </li>
        </ul>

        <div class="loading" style="text-align: center; height: 80px">
            <img src="img/loading2.gif" height="100%">
        </div>

        <div class="content">
            <div class="pagination-holder clearfix">
                <div id="light-pagination" class="pagination"></div>
            </div>
        </div>

        <div id="no" style="text-align: center;color: red;font-size: 20px"></div>
    </div>
</div>
</body>
<script>
   //设置进入条件true
   let comeInCondition = true;
   //误差高度
   let errorHeight = 20;
   //设置起始页面和页面显示个数
   let pageBegin = 1;
   let pageSize = 40;

   //设置滚轮滑动事件
   $(function () {
   $(window).scroll(function () {
   //获得页面总高度 document
    let totalHeight = $(document).height();
   //获得可视区域高度
   let viewHeight = $(window).height();
   //获得滚轮已滚动区域高度
   let slideHeight = $(window).scrollTop();
   //判断是否>=页面总高度
       if(errorHeight+slideHeight+viewHeight>=totalHeight){
   //判断进入条件是否合格
           if(comeInCondition==true){
   //显示加载图片
               $(".loading").show();
   //修改进入条件 false
           comeInCondition=false;
   //调用方法后台访问
           showMore(pageBegin,pageSize);
   //页数+1
               pageBegin++;
           }
       }
   });
   });
    //方法
   function showMore() {
   //定义拼接字符串变量
       let s = "";
   //AJAX
       $.ajax({
   //遍历数据
       url:"/newsServlet",
       data:{"page":pageBegin,
             "pageSize":pageSize
            },
       success:function (data) {
           //如果数据为空直接判定
           if(data==""||data==null){
               //隐藏加载图标
               $(".loading").hide();
               $("#no").text("我也是有底线的...")
               return;
           }
   //拼接字符串
       for(let d  of data){
           s+=`<li>
               <div class="title-box">
               <a href="#" class="link">
                  ${d.title}
               <hr>
               </a>
               </div>
               </li>`
       }
   //追加append
       $(".news_list").append(s);
       //隐藏加载图标
           $(".loading").hide();
   //设置进入条件true
           comeInCondition=true;
       }
       })
   }







    // //1.定义发送请求标记
    // let send = true;
    //
    // //2.定义当前页码和每页显示的条数
    // let page = 1;
    // let pageSize = 10;
    //
    // //3.定义滚动条距底部的距离
    // let bottom = 1;
    //
    // //4.设置页面加载事件
    // $(function () {
    //     //5.为当前窗口绑定滚动条滚动事件
    //     $(window).scroll(function () {
    //         //6.获取必要信息,用于计算当前展示数据是否浏览完毕
    //         //当前窗口的高度
    //         let windowHeight = $(window).height();
    //
    //         //滚动条从上到下滚动距离
    //         let scrollTop = $(window).scrollTop();
    //
    //         //当前文档的高度
    //         let docHeight = $(document).height();
    //
    //         //7.计算当前展示数据是否浏览完毕
    //         //当 滚动条距底部的距离 + 当前滚动条滚动的距离 + 当前窗口的高度 >= 当前文档的高度
    //         if((bottom + scrollTop + windowHeight) >= docHeight) {
    //             //8.判断请求标记是否为true
    //             if(send == true) {
    //                 //9.将请求标记置为false,当前异步操作完成前,不能重新发起请求。
    //                 send = false;
    //                 //10.根据当前页和每页显示的条数来 请求查询分页数据
    //                 queryByPage(page,pageSize);
    //                 //11.当前页码+1
    //                 page++;
    //             }
    //         }
    //     });
    // });
    //
    // //定义查询分页数据的函数
    // function queryByPage(page,pageSize){
    //     //加载动图显示
    //     $(".loading").show();
    //     //发起AJAX请求
    //     $.ajax({
    //         //请求的资源路径
    //         url:"newsServlet",
    //         //请求的参数
    //         data:{"page":page,"pageSize":pageSize},
    //         //请求的方式
    //         type:"POST",
    //         //响应数据形式
    //         dataType:"json",
    //         //请求成功后的回调函数
    //         success:function (data) {
    //             if(data.length == 0) {
    //                 $(".loading").hide();
    //                 $("#no").html("我也是有底线的...");
    //                 return;
    //             }
    //             //加载动图隐藏
    //             $(".loading").hide();
    //             //将数据显示
    //             let titles = "";
    //             for(let i = 0; i < data.length; i++) {
    //                 titles += "<li>\n" +
    //                     "                <div class=\"title-box\">\n" +
    //                     "                    <a href=\"#\" class=\"link\">\n" +
    //                                                 data[i].title +
    //                     "                        <hr>\n" +
    //                     "                    </a>\n" +
    //                     "                </div>\n" +
    //                     "            </li>";
    //             }
    //
    //             //显示到页面
    //             $(".news_list").append(titles);
    //             //将请求标记设置为true
    //             send = true;
    //         }
    //     });
    // }

</script>
</html>

案例:分页插件使用

后端使用PageHelper 封装的页面对象,用ObjectMapper转换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网站首页</title>
    <link rel="stylesheet" href="css/tt.css">
    <link rel="stylesheet" href="css/simplePagination.css">
</head>
<body>
<div class="top">
    <span class="top-left">下载APP</span>
    <span class="top-left"> 北京         晴天</span>
    <span class="top-right">更多产品</span>
</div>

<div class="container">

    <div class="left">
        <a>
            <img src="img/logo.png"><br/>
        </a>

        <ul>
            <li>
                <a class="channel-item active" href="#">
                    <span>
                        推荐
                    </span>
                </a>
            </li>

            <li><a class="channel-item" href="#">
                <span>
                    视频
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    热点
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    直播
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    图片
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    娱乐
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    游戏
                </span>
            </a></li>

            <li><a class="channel-item" href="#">
                <span>
                    体育
                </span>
            </a></li>
        </ul>

    </div>
    <div class="center">
        <ul class="news_list">

        </ul>

        <div class="content">
            <div class="pagination-holder clearfix">
                <div id="light-pagination" class="pagination"></div>
            </div>
        </div>

    </div>
</div>
</body>
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/jquery.simplePagination.js"></script>
<script>
    //1.定义当前页码和每页显示的条数
    let start = 1;
    let pageSize = 10;

    //2.调用查询数据的方法
    queryByPage(start,pageSize);

    //3.定义请求查询分页数据的函数,发起AJAX异步请求,将数据显示到页面
    function queryByPage(start,pageSize) {
        $.ajax({
            //请求的资源路径
            url:"newsServlet2",
            //请求的参数
            data:{"start":start,"pageSize":pageSize},
            //请求的方式
            type:"POST",
            //响应数据形式
            dataType:"json",
            //请求成功后的回调函数
            success:function (pageInfo) {
                //将数据显示到页面
                let titles = "";
                for(let i = 0; i < pageInfo.list.length; i++) {
                    titles += "<li>\n" +
                        "                <div class=\"title-box\">\n" +
                        "                    <a href=\"#\" class=\"link\">\n" +
                                                pageInfo.list[i].title +
                        "                        <hr>\n" +
                        "                    </a>\n" +
                        "                </div>\n" +
                        "            </li>";
                }
                $(".news_list").html(titles);

                //4.为分页按钮区域设置页数参数(总页数和当前页)
                $("#light-pagination").pagination({
                    pages:pageInfo.pages,
                    currentPage:pageInfo.pageNum
                });

                //5.为分页按钮绑定单击事件,完成上一页下一页查询功能
                $("#light-pagination .page-link").click(function () {
                    //获取点击按钮的文本内容
                    let page = $(this).html();
                    //如果点击的是Prev,调用查询方法,查询当前页的上一页数据
                    if(page == "Prev") {
                        queryByPage(pageInfo.pageNum - 1,pageSize);
                    }else if (page == "Next") {
                        //如果点击的是Next,调用查询方法,查询当前页的下一页数据
                        queryByPage(pageInfo.pageNum + 1,pageSize);
                    } else {
                        //调用查询方法,查询当前页的数据
                        queryByPage(page,pageSize);
                    }
                });
            }
        });
    }

</script>
</html>

JSON转换

  • 后端ObjectMapper
    • writeValueAsString
    • readValue(new TypeReferences<>(){}) 使用方式见JSON篇

其他知识点

  • 在使用对象执行事件的时候,()中使用function匿名函数时,是绑定事件,没有则是执行函数。

    $("#b2").click(function () {   //绑定点击事件
               $("#city").empty();  
           });
    
    $("#b2").click();  //执行点击事件。  (前面有代码已经定义过绑定事件)
    
  • 在前端调试前的console里面是可以写代码执行的。

  • 标签中如果没有申明属性,使用attr获取出来的值为undefined,用prop获取出来时false。

url:“newsServlet2”,
//请求的参数
data:{“start”:start,“pageSize”:pageSize},
//请求的方式
type:“POST”,
//响应数据形式
dataType:“json”,
//请求成功后的回调函数
success:function (pageInfo) {
//将数据显示到页面
let titles = “”;
for(let i = 0; i < pageInfo.list.length; i++) {
titles += “

  • \n” +
    " <div class=“title-box”>\n" +
    " <a href="#" class=“link”>\n" +
    pageInfo.list[i].title +
    "
    \n" +
    " \n" +
    " \n" +
    "
  • “;
    }
    $(”.news_list").html(titles);

                //4.为分页按钮区域设置页数参数(总页数和当前页)
                $("#light-pagination").pagination({
                    pages:pageInfo.pages,
                    currentPage:pageInfo.pageNum
                });
    
                //5.为分页按钮绑定单击事件,完成上一页下一页查询功能
                $("#light-pagination .page-link").click(function () {
                    //获取点击按钮的文本内容
                    let page = $(this).html();
                    //如果点击的是Prev,调用查询方法,查询当前页的上一页数据
                    if(page == "Prev") {
                        queryByPage(pageInfo.pageNum - 1,pageSize);
                    }else if (page == "Next") {
                        //如果点击的是Next,调用查询方法,查询当前页的下一页数据
                        queryByPage(pageInfo.pageNum + 1,pageSize);
                    } else {
                        //调用查询方法,查询当前页的数据
                        queryByPage(page,pageSize);
                    }
                });
            }
        });
    }
    
    ```

    JSON转换

    • 后端ObjectMapper
      • writeValueAsString
      • readValue(new TypeReferences<>(){}) 使用方式见JSON篇

    其他知识点

    • 在使用对象执行事件的时候,()中使用function匿名函数时,是绑定事件,没有则是执行函数。

      $("#b2").click(function () {   //绑定点击事件
                 $("#city").empty();  
             });
      
      $("#b2").click();  //执行点击事件。  (前面有代码已经定义过绑定事件)
      
    • 在前端调试前的console里面是可以写代码执行的。

    • 标签中如果没有申明属性,使用attr获取出来的值为undefined,用prop获取出来时false。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
省市县(区)三级选择, 含UI, 可用与移动端web开发 ----------------构造函数--------------------- fnBdAdCode({ test:false,//开启测试输出 depth:3, //选择级别,1 省, 2省市, >=3省市县(区) fn:function(name,code,o){}//选择事件,返回参数 name 名称,code GB码,o 元数据{} sheng:"",//初始化查询省{sheng:"江苏省",shi:"扬州市",qu:"广陵区"} 最少要有一个参数 shi:"",//初始化查询市 qu:"",//初始化查询县(区) code:"",//初始化查询code initdom:true//加载选择弹层dom,仅查数据可不加载,手动加载 x.initdom() }); -------------初始化查询元数据------------------------ _so=fnBdAdCode({qu:"回民区",initdom:0,depth:2}); return _so: {"name":"回民区","tag":"内蒙古自治区>呼和浩特市","code":150103,"result":[{"tag":"内蒙古自治区>呼和浩特市>回民区","code":150103}]} 其中: result=[所有匹配结果] 未找到: _so.code=-1 _so.result=[] _so=fnBdAdCode({code:321000}); return _so: {"name":"扬州市","tag":"江苏省>扬州市>扬州市","code":321000,"result":[{"tag":"江苏省>扬州市>扬州市","code":321000}]} 其中: result=[所有匹配结果] 未找到: _so.code=-1 _so.result=[] -------------查询地区code------------------------ _so.getcode({sheng:"江苏省",shi:"扬州市",qu:"广陵区"}); return: 321002 未找到:-1 (_so.code=-1 _so.result=[]) so: {"name":"广陵区","tag":"江苏省>扬州市>广陵区","code":321002,"result":[{"tag":"江苏省>扬州市>广陵区","code":321002}]} 其中: result=[所有匹配结果] _so.getcode({shi:"扬州"}); return: 321000 未找到:-1 (_so.code=-1 _so.result=[]) _so: {"name":"扬州市","tag":"江苏省>扬州市>扬州市","code":321000,"result":[{"tag":"江苏省>扬州市>扬州市","code":321000}]} 其中: result=[所有匹配结果] ------------查询code对应地区------------------------- _so.gettag(150103); return: 内蒙古自治区>呼和浩特市>回民区 未找到:"" (_so.code=-1 _so.result=[]) _so: {"name":"回民区","tag":"内蒙古自治区>呼和浩特市>回民区","code":150103,"result":[{"tag":"内蒙古自治区>呼和浩特市>回民区","code":150103}]} 其中: result=[所有匹配结果] ------------列出所有省份------------------------- _so.shenglst(); return: [[{"tag":"北京市>北京市>北京市","code":110000,"name":"北京市"},{"tag":"天津市>天津市>天津市","code":120000,"name":"天津市"}],...] _so: {"name":"","tag":"","code":31,"result":[{"tag":"北京市>北京市>北京市","code":110000,"name":"北京市"},{"tag":"天津市>天津市>天津市","code":120000,"name":"天津市"}]} 其中: tag|name=都为空, code=省份数据列表长度即:result.length 未找到: code=result.length=0, 省份数据列表=result=[] -------------列出下级城市------------------------ _so.shilst(320000); return: [[{"tag":"江苏省>南京市>南京市","code":320100,"name":"南京市"},{"tag":"江苏省>无锡市>无锡市","code":320200,"name":"无锡市"}],...] _so: {"name":"江苏省","tag":"江苏省>江苏省>江苏省","code":320000,"result":[{"tag":"江苏省>南京市>南京市","code":320100,"name":"南京市"},{"tag":"江苏省>无锡市>无锡市","code":320200,"name":"无锡市"}]} 其中: tag|name|code=当前省份数据 未找到: result=城市数据列表=[] -------------列出下级县(区)------------------------ _so.qulst(321000); return: [[{"tag":"江苏省>扬州市>邗江区","code":321003,"name":"邗江区"},{"tag":"江苏省>扬州市>高邮市","code":321084,"name":"高邮市"}],...] _so: {"name":"扬州市","tag":"江苏省>扬州市>扬州市","code":321000,"result":[{"tag":"江苏省>扬州市>邗江区","code":321003,"name":"邗江区"},{"tag":"江苏省>扬州市>高邮市","code":321084,"name":"高邮市"}]} 其中: tag|name|code=当前城市数据 未找到: result=县(区)数据列表=[]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值