JQuery使用

2023-11-19

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表示同步
method GET或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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JQuery使用 的相关文章

  • 网站降权的康复办法(详解百度SEO数据分析)

    随着搜索引擎算法的不断升级 很多网站在SEO优化过程中遭遇到降权的情况 如果您的网站也遭遇到了类似的问题 不必惊慌失措 本文将为您详细介绍网站降权恢复的方法 包括百度SEO数据分析 网站收录少的5个原因 网站被降权的6个因素以及百度SEO提
  • JAVA使用线程池查询大批量数据

    前言 在开发过程中可能会碰到某些独特的业务 比如查询全部表数据 数据量过多会导致查询变得十分缓慢 虽然在大多数情况下并不需要查询所有的数据 而是通过分页或缓存的形式去减少或者避免这个问题 但是仍然存在需要这样的场景 比如需要导出所有的数据到
  • 论文笔记(四):影像图中水体识别与提取技术研究综述

    快速并且准确地提取水体信息 在水资源规划和调查 预防洪水灾 害和船舶航行中具有重要意义 0 前言 1 遥感图像与人工勘测 遥感图像 成像周期相对较短 实时性强 不受地域限制 人工勘测 耗费大量的人力物力以及时间 2 水体识别方法 阈值法 操
  • C语言字符数组和字符串

    http c biancheng net cpp html 2921 html 用来存放字符的数组称为字符数组 例如 char a 10 一维字符数组 char b 5 10 二维字符数组 char c 20 c p r o g r a m
  • ★教程2:fpga学习教程入门100例目录

    1 订阅本教程用户可以免费获得本博任意2个 包括所有免费专栏和付费专栏 博文对应代码 私信博主给出代码博文的链接和邮箱 2 本FPGA课程的所有案例 部分理论知识点除外 均由博主编写而成 供有兴趣的朋友们自己订阅学习使用 未经本人允许 禁止
  • AI系统论文阅读:SmartMoE

    提出稀疏架构是为了打破具有密集架构的DNN模型中模型大小和计算成本之间的连贯关系的 最著名的MoE MoE模型将传统训练模型中的layer换成了多个expert sub networks 对每个输入 都有一层special gating n
  • 这款毕设至少得收一千五,Python实现学生教师刷脸签到系统。

    背景 今天我在母校群又接到了一个做毕业设计的单子 论题 用Python或者Java实现学生教师刷脸签到系统 一般来讲做学生信息管理系统收500 这个大家觉得报价1500贵吗 我先带大家看干货 简介 利用Python语言 Flask框架 Dl
  • mysql查询时加不加引号的问题

    在查询mysql时碰到了查询条件加引号和不加引号的问题 一 如果字段本身是int类型 如果查询条件中加了引号 比如select from user where id 4 这时候可以查出id 4的用户信息 但是使用select from us
  • 打开mysql的步骤。

    安装mysql软件之后 打开mysql 显示error Can t connect to MySQL server on localhost 10061 原因是服务器没开 这个时候workbench连接不上 然后client登录不上 总结m
  • 2023华为OD机试真题【星际篮球争霸赛/动态规划】

    题目描述 在星球争霸篮球赛对抗赛中 最大的宇宙战队希望每个人都能拿到MVP MVP的条件是单场最高分得分获得者 可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场 并且让所有得分的选手得分都相同 然而比赛过程中的每1分钟的得分都只能由某一
  • Radxa Rock 3a NPU调用指南

    0x0 Radxa Rock 3a开发板介绍 Radxa Rock 3a开发板是基于瑞芯微RK3568芯片设计的 ARM CPU采用4核Cortex A55 Cortex A53的继任者 主频最高可达2 0Ghz CPU性能相当于中高端手机
  • paramiko sftp 问题记录

    paramiko 是一款非常优秀得远程ssh库 能够ssh远程到主机 并执行命令 而且还能通过sftp连接主机 笔者得测试环境 因为安全关系 ssh默认端口修改成其他端口 再往上查阅资料 连接sftp 代码 t paramiko Trans
  • 坐标移动c语言,C语言 坐标移动详解及实例代码

    搜索热词 题目描述 开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S表示向下移动 从 0 0 点开始移动 从输入字符串里面读取一些坐标 并将最终输入结果输出到输出文件里面 输入 合法坐标为A 或者D或者W或者S 数字
  • 【狂神说】Mybatis学习笔记(全)

    文章目录 前言 1 简介 1 1 什么是MyBatis 1 2 如何获得Mybatis 1 3 持久化 1 3 1 数据持久化 1 3 2 为什么需要持久化 1 4 持久层 1 5 为什么需要MyBatis 2 第一个Mybatis程序 2
  • 《IT项目管理》-大题&计算题保分秘籍

    经过今天的努力 已经把大部分大题和计算题全部总结完了 希望对你们有用 查看链接自取 百度网盘 APP即可获取 链接 https pan baidu com s 1U0EFY23KgTtM8lKlYnjrug pwd tehx 提取码 teh
  • 软考-嵌入式系统设计师-笔记:历年专业英语题

    文章目录 2020年 2019年 2018年 2017年 2016年 2015年 2014年 2013年 2020年 题目 加粗的为各题答案 Fog computing is a mid layer between cloud data c
  • deepIn 、 DDE 系统桌面黑屏解决方案

    桌面黑屏有两种情况 1 桌面除了底部菜单栏 其它全是黑的 解决方案 Deepin sudo apt install reinstall dde DDE sudo apt fix broken install sudo apt install
  • 基于SpringBoot和vue的若依后台管理系统 部署

    RuoYi Vue是一款前后端分离的极速后台开发框架 基于SpringBoot和Vue 目录 一 准备 二 启动前端项目 解决报错 digital envelope routines unsupported 测试 三 启动后端项目 四 运行
  • 8个适合新手的Python小项目

    这是我挑出来的8个适合新手的小项目 涉及了爬虫 多线程 selenium PhantomJs itchat 邮件发送 crontab 命令行颜色显示 excel操作 PIL 识别验证码 首先说明 天下没有免费的午餐 每个项目平均下来2元多一
  • 根据子网掩码算出 IP 地址 的网络号和主机号

    我们如何根据子网掩码算出 IP 地址 的网络号和主机号呢 举个例子 比如 10 100 122 0 24 后面的 24表示就是 255 255 255 0 子网掩码 255 255 255 0 二进制是 11111111 11111111

随机推荐

  • Ant design Pro V5 +Typescript + Hooks + Umi + Dev + SpringBoot + mysql + redis + scrity 实现动态菜单权限管理

    Ant design Pro V5 Typescript Hooks Umi Dev SpringBoot mysql redis scrity 实现动态菜单权限管理 企业中台架构 1 app tsx页面配置 该页面集成了登陆权限控制 动态
  • Android实战系列(三)---级联菜单

    需求A 一级菜单 多级菜单联动 1 在activity上弹出多个pop窗口 达到父菜单与子菜单级联的效果 2 多个Activity页面相互的嵌套实现多级菜单 考虑 传值 数据结构的定义 之前在用前端写Android构造级联菜单出现过标题栏不
  • 算法系列15天速成——第八天 线性表【下】

    一 线性表的简单回顾 上一篇跟大家聊过 线性表 顺序存储 通过实验 大家也知道 如果我每次向 顺序表的头部插入元素 都会引起痉挛 效率比较低下 第二点我们用顺序存储时 容 易受到长度的限制 反之就会造成空间资源的浪费 二 链表 对于顺序表存
  • Finetuner+:为企业实现大模型微调和私有化部署

    如 ChatGPT GPT4 这样的大型语言模型就像是你为公司请的一个牛人顾问 他在 OpenAI Google 等大公司被预训练了不少的行业内专业知识 所以加入你的公司后 你只需要输入 Prompt 给他 介绍一些业务上的背景知识 他就能
  • 2021-01-08

    问题 F 有序数组中插入元素 时间限制 1 Sec 内存限制 128 MB 提交 2116 解决 967 提交 状态 讨论版 题目描述 输入n n lt 20 输入n个有序整数 降序或升序 插入元素e 使新序列仍按原来的排序规则为有序序列
  • 【Java】Java中的String类

    文章目录 一 认识 String 类 二 String 类的常用方法 2 1 构造方法 2 2 String 类对象之间的比较 2 3 字符串查找 2 4 字符串的转换 2 5 字符串替换 2 6 字符串拆分 2 7 字符串截取 2 8 字
  • Java语言 ASCII to Hex 互转(IOT-示例)

    概述 最近想起之前做的IOT项目 使用JAVA写了一个
  • libcurl交叉编译支持https

    简介 libcurl是一个跨平台的网络协议库 支持dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
  • Android Ble 连接设备失败 onConnectionStateChange status 返回133

    Android Ble 连接设备失败时回调函数 onConnectionStateChange status 返回133 开始找问题 各种mac地址 权限 线程 找了个遍 结果就是返回纹丝不动 又因为 mBluetoothGatt mBlu
  • BUUCTF [极客大挑战 2019]Knife

    打开一看结合题目 就是连接一下菜刀蚁剑 菜刀没用过只有蚁剑 下面用蚁剑实现 设置好URL和链接密码 找到flag文件 打开后找到flag 文件上传漏洞 一句话木马 php Asp Aspx 前端判断文件后缀名可以Burp Suite配置好P
  • pygame小游戏之飞机拼音大作战( 送给娃学拼音的礼物,星际旅行)

    二娃再过一年就该上一年级了 但现阶段的拼音咋都学不进去 买了拼音挂图贴在墙上 拉都拉不到旁边 突发奇想 何不用python的pygame做个小游戏 在玩中也能学习 让学变得有趣 这对搞编程的来说小菜一碟 于是说干就干 两个晚上就成型啦 这里
  • 如何使用条件格式在Excel中突出显示行

    Conditional formatting lets you format cells in an Excel spreadsheet based on the cells content For example you could ha
  • 程序员在囧途之垃圾创业团队

    以前 空虚和寂寞 时写的一篇通过真实案例进行 小说化改编 文 原型中的 我 并不完全代表作者本人 特此拿出和大家分享 也与自己共勉 正文 这年头互联网创业有两个人就算一个团队了 如果是精英组成的团队往往两个人能抵得上十个人 但如果是一帮平庸
  • 接口测试postman和python代码实现

    postman是一个做接口测试的工具 它是谷歌公司的 可谓是根正苗红的大家族 在接口测试领域和它拼的一个手指头也能数得出来 POSTMAN本只是Chrome的一个插件工具 后来谷歌老爹看着小家伙越来越受测试工程师的喜爱 名气越来越大 便做了
  • 【Detectron2】入门03 Faster RCNN + VOC

    在detectron2 data datasets builtin py中可以看到在DatasetCatelog上各个数据集的注册 其中 root即为数据集的基地址 代码指明 root要么是DETECTRON2 DATASETS 要么是da
  • Beyond Compare使用和安装教程

    一 背景 Beyond Compare是一款文件和文件夹比较工具 它能够比较和同步文件夹和文件 并显示它们之间的差异 方便用户决定如何更新和管理它们 Beyond Compare的主要用途包括 文件和文件夹比较 用户可以将两个文件或文件夹进
  • 九种常见排序的比较和实现

    首先排序算法大的可以分为 关键字比较 非关键字比较 关键字比较 关键字比较就是通过关键字之间的比较和移动 从而使整个序列有序 而关键字比较的算法 又可以像下面这样划分 对于排序算法之间的比较 无异于时间复杂度和空间复杂度 看下面这张表格 由
  • OpenCV读取视频并获得相关属性信息

    使用VideoCapture读取视频 video cv2 VideoCapture r prototype mp4 通过下代码确定视频是否读取成功 is open video isOpened 读取成功后 通过VideoCapture ge
  • css实现响应式布局

    一 什么是响应式布局 响应式布局指的是同一页面在不同屏幕尺寸下有不同的布局 传统的开发方式是PC端开发一套 手机端再开发一套 而使用响应式布局只要开发一套就够了 响应式设计与自适应设计的区别 响应式开发一套界面 通过检测视口分辨率 针对不同
  • JQuery使用

    JQuery 框架 注意事项 在导入JQUREY外部文件的时候不可以使用自闭合标签 无效化导入且不报错 不可使用此方式加载 jQuery框架特点 免费开源 轻量级框架 占用资源少 运行速度快 宗旨 write less do more jQ