Web进阶 - jQuery

0、$ 可以当做一个函数名

在 JavaScript 中, $ 是一个合法的标识符。
$ 可以当做一个函数名:
    function $(形参) {
     函数体
    }
优点:
  1、只有一个字符,写的时候快;
  2、平常很少用,具有辨识性。

曾经在EL表达式用到$, 但它是大括号: ${作用域对象别名.共享数据}

<!DOCTYPE html>
<html>
	<head>
		
		<!--这行代码的作用是告诉浏览器采用哪一种字符集打开当前页面。
		注意:并不是设置当前页面的字符编码方式。-->
		<meta charset="utf-8">
		
		<title>$可以当做一个函数名 </title>
						
		<script type="text/javascript">
			//自定义方法, 获取js中的dom对象 .
			// 要尽量少的书写代码,节省时间
			
			//自己写一个方法(函数),下面两个函数来调用它,减少代码书写量:
			
			//function getObject(domId){  //getObject函数名
			//function g(domId){  //g函数名,更简单
			   // $ 在这里也是一个函数的名称,更具有辨识性,平常很少用。比如上面的函数名g,有时候可能为变量名g
			function $(domId){   
			
				var obj = document.getElementById(domId);
				return obj ;
			}
			
			function fun1(){
				//通过id获取dom对象
				// var obj = document.getElementById("txt1");
				//var obj =getObject("txt1");  //调用上面自己写的函数,减少代码书写量
				var obj =$("txt1");
				alert(obj.value);
			}
			
			function fun2(){
				//通过id获取dom对象
				//var obj = document.getElementById("txt2");
				//var obj =getObject("txt2");   //调用上面自己写的函数,减少代码书写量
				var obj =$("txt2");
				alert(obj.value);
			}
			
		</script>
	</head>
	<body>
		
		<input type="text" id="txt1" value="我是txt1"/> <br/>
		<input type="text" id="txt2" value="我是txt2"/> <br/>
		<input type="button" value="单击按钮 1 " onclick="fun1()" /> <br/>
		<input type="button" value="单击按钮 2 " onclick="fun2()" />
		
	</body>
</html>

在这里插入图片描述

1、jQuery 介绍

  • jQuery 是一款跨主流浏览器的 JavaScript 库,封装了 JavaScript 相关方法调用,简化JavaScript 对 HTML DOM 操作

    jQuery是js库。
    库:相当于java的工具类,库是存放东西的,
    jQuery是存放js代码的地方,放的用js代码写的function函数

  • 为什么[why] 使用 jQuery?
      重要理由:
        它能够兼容市面上主流的浏览器。
        IE 和 FireFox,Google 浏览器处理 AJAX,创建异步对象是不同的,
        而 jQuery 能够使用一种方式在不同的浏览器创建 AJAX异步对象。

    其他优点:
    (1)写少代码,做多事情【write less do more】
    (2)免费,开源且轻量级的 js 库,容量很小
    (3)兼容市面上主流浏览器,例如 IE,Firefox,Chrome
    (4)能够处理 HTML/JSP/XML、CSS、DOM、事件、实现动画效果,也能提供异步 AJAX功能
    (5)文档手册很全,很详细
    (6)成熟的插件可供选择,多种 js 组件,例如日历组件(点击按钮显示下来日期)
    (7)出错后,有一定的提示信息
    (8)不用再在 html 里面通过< script>标签插入一大堆 js 来调用命令了

  例如:使用 JavaScript 定位 DOM 对象常用的三种方式:
    (1)通过 ID 属性:document.getElementById()
    (2)通过 class 属性:getElementsByClassName()
    (3)通过标签名:document.getElementsByTagName()

    上面代码可以看出 JavaScript 方法名太长了,大小写的组合太多了,编写代码效率低,容易出错。
    jQuery 分别使用$("#id") , $(".class 名") , $(“标签名”) 封装了上面的 js 方法。

2、使用JQurey 的第一个例子

  • 第一步:获取 jQuery
       官网下载地址:https://jquery.com/download/
       每一个同一版本号的 jQuery,其库又分为两个。
           一个是未压缩版,可查看源码 ————> [开发时使用];
           一个是压缩版,将注释、空格均做了删除,将变量字符数减少 ————> [产品上线时使用]

    这里使用【jquery-3.4.1.js】、【jquery-3.4.1.min.js】

  • 第二步:选择开发工具

   编写 jQuery 的工具很多,能编写 HTML 的工具都支持 jQuery
   单独学习 jQuery 库使用,可以轻量的开发工具,例如 记事本、 EditPlus、HBuilder、HbuilderX等
   编写项目可以使用集成开发工具,例如在 IDEA, Eclipse , MyEclipse ,WebStorm 等

  • 这里我使用HbuilderX
    1)打开HbuilderX,创建一个项目(名称:jQuery-code),给项目选择一个文件存放目录
    2)在项目中再创建一个目录:右键项目名称—新建—目录,常用名称为 js
    3)拷贝下载的 jquery-3.4.1.js 文件到目录
    4)先建好html后,使用 jQuery,首先要将 jQuery 库引入。使用如下语句:
 <script type="text/javascript" src="js/jquery-3.4.1.js"></script>

   5)$(dom对象):表示将 dom对象 转换为 jQuery 对象。

   $(document).ready() 函数:表示当DOM 对象全部加载完毕后,马上执行的函数。和load事件一样的
   $(document).ready() 与 $() 、 jQuery() 、 window.jQuery() 是等价

   6)完整代码:【1-hellojQuery.html】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>第一个例子</title>
		
		<!-- 指定jquery的库文件位置, 使用相对路径,当前项目的js目录下的指定文件 -->
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		
		<script type="text/javascript">
			/* 
				将JavaScript中的document对象  转换为 jQuery 对象
				使用jQuery中的函数ready,当DOM对象全部加载完毕后,执行function中的内容
			*/
			/*
			$(document).ready(function(){
				//自定义的功能代码
				alert("Hello jQuery,你好")
			 }) */
			
			$( function(){    //和上面的等价的,更简单
				//自定义的功能代码
				alert("Hello jQuery,你好啊!!")
			  } ) 

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

【jQuery 和JavaScript 的入口函数】

  • jQuery 入口函数:
$(document).ready(function(){
    // 执行代码
});

或者

$(function(){
    // 执行代码
});
  • JavaScript 入口函数:
window.onload = function () {
    // 执行代码
}
  • jQuery 入口函数与 JavaScript 入口函数的区别:
    jQuery 的入口函数是在 html 所有标签(DOM)都加载之后,就会去执行。
    JavaScript 的 window.onload 事件是等到所有内容,包括外部图片之类的文件加载完后,才会执行。
    在这里插入图片描述

3、 DOM对象和 jQuery对象

  • DOM(Document Object Model,文档对象模型),是 W3C 组织推荐的处理可扩展标志语言的标准编程接口。
    通过 DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。
    可以对其中的内容进行修改和删除,同时也可以创建新的元素。

  • DOM 对象:
    用 JavaScript 语法创建的对象,也看做是 js 对象。
    var obj= document.getElementById(“txt1”); // obj是dom对象,也叫做js对象
    obj.value;

  • jquery对象:
    使用jquery语法表示对象叫做jquery对象, 注意:jquery表示的对象都是数组!!!
    例如 var jobj = $("#txt1") , jobj就是使用jquery语法表示的对象。也就是jquery对象。
    它是一个数组。现在数组中就一个值。

  • dom对象可以和jquery对象相互的转换
    (1)dom对象可以转为jquery
          【语法】: $ (dom对象)
        一般情况下,在命名 jQuery 对象时,为了与 DOM 对象进行区分,习惯性的以$ 开头,但这不是必须的

    (2)jquery对象也可以转为dom对象
        【语法】:jQuery对象.get(0)jQuery对象[0]
    例如:$("#txt1").get(0) 或者 $("#txt1")[0]
    从数组中获取第一个对象, 就是dom对象, 使用[0]或者get(0).

    为什么要进行dom和jquery的转换:
        目的是要使用对象的方法,或者方法。
        当你是dom对象时,可以使用dom对象的属性或者方法,
        如果你要想使用jquery提供的函数,必须是jquery对象才可以。

【2-domTojQuery.html】:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>dom对象 转jQuery对象</title>
		
		<!-- 指定jquery的库文件位置 -->
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		
		<script type="text/javascript">
			function btnClick(){
				//使用js语法获取dom对象
				var domBtn = document.getElementById("btn1")
				alert("dom对象的属性值:"+domBtn.value)
				
				//使用jQuery库中的函数$(),把dom对象转jQuery对象
				var $btn = $(domBtn)  //$btn中的$不是必须的,这只是一个变量名而已
				
				//使用jQuery库中的的函数val(),获取值
				alert("jQuery对象的值:"+ $btn.val() )
			}			
		</script>
	</head>
	<body>
		<input type="button" value="我是按钮" id="btn1" onclick="btnClick()" />		
	</body>
</html>	

在这里插入图片描述
在这里插入图片描述

【3-jqueryToDom.html】:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>jQuery对象 转为 DOM 对象</title>
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		<script type="text/javascript">
			function btnClick(){
				//使用jquery的语法,获取页面中的dom对象:
				
				// $("#txt1") //这是一个jQuery对象
				
				//jQuery对象 转为 dom:  
				//var obj = $("#txt1")[0];   // 从数组中获取下标是0的dom对象
				var obj = $("#txt1").get(0); //从数组中获取下标是0的dom对象	
				//alert( obj.value)
				
				var num = obj.value
				//计算平方
				obj.value = num * num;
			}
			
		</script>
	</head>
	<body>
		 <div>
			 <input type="text" id="txt1" value="输入整数" />
			 <input type="button" value="计算平方" onclick="btnClick()" /><br/>
		</div>
	</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、选择器

  • 选择器: 就是定位条件;通知 jquery函数 定位满足条件的 DOM对象

  • 基本选择器:(与css中是对应的)

选择器语法说明
id 选择器$("#id名")通过dom对象的id属性定位dom对象的。id在当前页面中是唯一值。
class 选择器$(".class名")通过dom对象的class属性定位dom对象的
标签 选择器$(“标签名”)使用标签名称定位dom对象的
所有选择器$("*")选取页面中 所有dom对象
组合选择器$(“id名, .class名, 标签名”)多个被选对象间使用逗号分隔后形成的选择器

【4-selector.html】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>基本选择器</title>
		
		<!--在页面 head 部分定义 css样式块:-->
		<style type="text/css">
			
			#one{	 /*这是一个id选择器,定位所有的id=one的元素(实际上也就一个,id唯一性)*/
				font-size: 20pt;
			}
			
			div{  		/*这是一个标签选择器,定位所有的div标签*/
				background: gray;
				width : 300px;
				height : 100px;
			}
			
			.two{  /* 这是一个class类选择器,定位所有的class=two的元素(class没有唯一性要求)*/
				background: gold;
				font-size: 20pt;
			}
		</style>
		
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		<script type="text/javascript">
			function fun1(){
				//获取 id选择器
				var obj = $("#one"); //id=one的所有元素
				//使用jquery中改变样式的函数
				obj.css("background","red");  //变红
			}
			
			
			function fun2(){
				//获取 class类选择器
				var obj = $(".two");   //class=two的所有元素
				obj.css("background","green");  //变绿
			}
			
			function fun3(){
				//获取 标签选择器
				var obj = $("div");  //所有的div
				//数组有3个对象
				//jquery的操作都是操作数组中的全部成员.
				//所以是给所有的div都设置的背景色
				obj.css("background","blue");  //变蓝
			}
			
			function fun4(){
				//所有选择器(页面的所有元素)
				var obj = $("*");
				obj.css("background","LightBlue");  //变 浅蓝色
			}
			
			function fun5(){
				//组合选择器
				var obj = $("#one,span,.two"); //id=one的id选择器、span标签 、class选择器
				obj.css("background","red"); //变红
				
				 //obj是一个数组, 有两个成员, 下标1 是第二个元素:span标签
				$( obj[1] ).css("background","green");//变绿				
			}
			
		</script>
		
	</head>
	<body>
		<div id="one">我是id=one的div      </div> <br/>
		
		<div class="two">我是class=two的div</div> <br/>
		
		<div>我是没有id、class的div        </div> <br/>
		
		<span class="two">我是class=two的span   </span> <br/><br/>
		
		点击下方按钮,使上面的DOM对象颜色发生变化:<br/>
		<input type="button" value="获取id=one的dom对象————>变红" 		onclick="fun1()" />  <br/>

		<input type="button" value="获取class=two的dom对象————>变绿" 	onclick="fun2()" />  <br/>

		<input type="button" value="获取div标签————>变蓝" 				onclick="fun3()" />   <br/>

		<input type="button" value="所有选择器(所有dom对象)————>变浅蓝色" onclick="fun4()"/> 	  <br/>

		<input type="button" value="组合选择器" 							onclick="fun5()"/> 
	</body>
</html>

在这里插入图片描述

5、表单选择器

  • 表单选择器是指文本框、单选框、复选框、下拉列表等元素的选择方式。
    该方法【无论是否存在表单< form>,均可做出相应选择】。表单选择器是为了能更加容易地操作表单,
    表单选择器是根据元素类型来定义的:
		<input type="text">
		<input type="password">
		<input type="radio">
		<input type="checkbox">
		<input type="button">
		<input type="file">
		<input type="submit">
		<input type="reset">
  • 使用标签的type属性值,定位dom对象的方式。
       语法: $(":type属性值")
    例如:
       $(":text") , 选择所有的单行文本框
       $(":password")选取所有的密码框
       $(":radio") 选取所有的单选按钮
       $(":checkbox")选取所有的复选框
       $(":button") ,选择所有的按钮

【5-formSelector.html】

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>表单选择器</title>
		
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		<script type="text/javascript">
			function fun1(){
				//使用表单选择器 $(":type的值")
				var obj = $(":text");  //所有的type=text的元素
				
				//获取对象的值————val()是jquery中的函数, 读取value属性值
				alert( obj.val());				
			}
			
			function fun2(){
				var obj = $(":radio"); //数组,有2个对象 man ,woman
				for(i=0; i<obj.length; i++){  //循环数组,数组中的成员是 dom对象,可以dom的属性或者函数
					//将jquery对象转为dom对象
					var v = obj[i];
					//获取对象的值————value是dom对象的属性, 读取value属性值
					alert( v.value );
				}			
			}
			function fun3(){
				var obj = $(":checkbox"); //数组,有3个对象
				for(i=0; i<obj.length; i++){  
					var v = obj[i]; //dom对象
					//alert( v.value ); //dom的value属性
					
					//如果使用jqueyr的val函数, 获取value的值?
					//1. 需要jquery对象
					var jObj = $(v); //jquery对象
					//2. 调用jquery函数
					alert("jquery的函数调用=" + jObj.val());					
				}					
			}
			
		</script>
		
	</head>
	<body>
		文 本 框 :
		<input type="text" value="我是type=text" />	<br/><br/>
		
		单选按钮:
		<input type="radio" name="sex" value="man"   /><input type="radio" name="sex" value="woman" /><br/><br/>

		复 选 框 :
		<input type="checkbox" value="bike"  /> 骑行 	
		<input type="checkbox" value="movie" /> 电影 	
		<input type="checkbox" value="music" /> 音乐	<br/><br/>

		<input type="button" value="读取所有的text的值" onclick="fun1()"/> 	<br/>
		<input type="button" value="读取所有的radio的值" onclick="fun2()"/>	<br/>
		<input type="button" value="读取所有的checkbox的值" onclick="fun3()"/>
	
	</body>
</html>

在这里插入图片描述

6、jquery中给dom对象绑定事件

回顾:JS中注册事件的2种方式:

	1)直接在标签中使用事件句柄:

		<input type="button" value="你好111" onclick="alert('按钮被单击了111')"/>
		
		onclick:click事件对应的事件句柄(在事件前面加上on,即为事件句柄)
		事件句柄 是指事件发生时要进行的操作。
		
	2)使用纯JS代码完成事件的注册	
	
		<input type="button" value="你好222"  id="btn"/>		
				
		<script type="text/javascript">
			var mybtn = document.getElementById("btn");
			mybtn.onclick = function(){   
				alert("btn按钮单击了222");
			}				
		</script>
  • 1、定义元素监听事件
        语法: $(选择器).事件名称(处理函数)
           (1) $(选择器):定位dom对象, dom对象可以有多个, 这些dom对象都绑定事件了
           (2) 事件:click、load、blur、focus…(JavaScript中学过)
           (3) 事件的处理函数:就是一个function ,当事件发生时,执行这个函数的内容。

    例如, 给id是btn的按钮绑定单击事件:
        $("#btn").click(funtion(){
            alert(“btn按钮单击了”)
        })

  • 2、on()事件绑定
        语法: $(选择器).on(event,data,function)
            (1) event:事件一个或者多个,多个之间空格分开
            (2) data:可选。规定传递到函数的额外数据,json 格式
            (3) function: 可选。规定当事件发生时运行的函数。

    on() 方法在被选元素上添加事件处理程序。该方法给 API 带来很多便利,推荐使用该方法

    例如,给id是btn的按钮绑定单击事件:
        $("#btn").on(“click”, function() {alert(“btn按钮单击了”) } )

【6_2-on绑定事件.html】

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>第二种绑定事件方式:on()绑定事件</title>
	
	<!--jquery中给dom对象绑定事件---------
		第二种方式:on()事件绑定:    语法:  $(选择器).on(event,function)-->
		
	<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
	<script type="text/javascript">
		
		//在dom对象创建好后(页面加载完毕之后),绑定事件
		$(function(){
			
			$("#btn1").click(function(){
				//使用append增加dom对象
				$("#mydiv").append("<input type='button' value='我是新加入的按钮' id='newBtn' />");
				
				//给这个新增的按钮绑定一个 click鼠标单击事件 
				//方法一:  $(选择器).event(function)
				$("#newBtn").click(function(){
					alert("新建的按钮被单击了1111");
				})
				
				//方法二:使用on()事件绑定   $(选择器) .on(event,function)
				$("#newBtn").on("click",function(){
					alert("新建的按钮被单击了2222");
				})
			})
			
		})		
	</script>
</head>
<body>
	
	<div id="mydiv" style="background: yellow;">
		我是一个div ,需要增加一个button
	</div>    
	<br/>
	
	<input type="button" value="创建一个button,并给这个button绑定一个click" id="btn1"/>
	
</body>
</html>

在这里插入图片描述
在这里插入图片描述

7、过滤器

  • 过滤器:在定位了dom对象后,根据一些条件筛选dom对象。
        过滤器就是一个字符串,用来筛选dom对象的。
        过滤器不能独立出现在 jquery 函数,如果使用只能出现在选择器后方。

  • 基本过滤器:

过滤器说明
$(“选择器:first”)数组中的第一个dom对象
$(“选择器:last”)数组中的最后一个dom对象
$(“选择器:eq(数组的下标)”)获取指定下标的dom对象
$(“选择器:lt(下标)”)获取小于下标的所有dom对象 (lt:less than)
$(“选择器:gt(下标)”)获取大于下标的所有dom对象 (gt:great than)

【6_1-filter1.html】

<!DOCTYPE html>
<html>
<head>
		<meta charset="utf-8">
		<title>事件绑定、过滤器</title>
		
		<!--定义 css样式块-->
		<style type="text/css">  
			div{
				background: gray;  /*所有的div背景颜色为灰色*/
			}
		</style>
		
		<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
		<script type="text/javascript">
		
			// $(document).ready( 函数 ): 当页面中的dom对象加载成功后,会执行ready(), 
			// $() 与 $(document).ready()是等价的.  
			// 相当于是js的load事件.
			
			$(function() {  
				//当页面dom对象加载后,给对象绑定事件,因为此时button对象已经在内存中创建好了.才能使用.
				
				//jquery中给dom对象绑定事件---------第一种方式:定义元素监听事件,语法: $(选择器).事件名称(处理函数)
				 $("#btn1").click(function(){  
					//过滤器
					var obj = $("div:first");
					obj.css("background","red");  //背景颜色 设为 红色
				}) 
				
				//给btn2绑定事件
				$("#btn2").click(function(){
					var obj = $("div:last");
					obj.css("background","green");
				})
				
				//给btn3绑定事件
				$("#btn3").click(function(){
					var obj = $("div:eq(3)");
					obj.css("background","blue");
				})

				 //jquery中给dom对象绑定事件---------第二种方式:on()事件绑定:        语法:  $(选择器) .on(event,function)
				$("#btn4").on("click", function(){  
					var obj = $("div:lt(3)");
					obj.css("background","orange");					
					
				})
				
				$("#btn5").click(function(){
					var obj = $("div:gt(3)");
					obj.css("background","yellow");
				})
				
				$("#txt").keydown(function(){  //keydown 键盘按下事件
					alert("keydown 键盘按下事件发生了")
				})
			})
			
		</script>
		
</head>
<body>
		<input type="text" id="txt" value="我绑定了键盘按下事件"/>	 <br /><br />
		
		<div id="one">我是div-0</div>
		<div id="two">我是div-1</div>
		<div>我是div-2
		    <div>我是div-3</div>
			<div>我是div-4</div>
		</div>
		<div>我是div-5</div> 	<br />
		
		<span>我是span</span>	<br/><br/>
		
		<input type="button" value="获取第一个div" id="btn1"/>		<br/>
		
		<input type="button" value="获取最后一个div" id="btn2"/>		<br/>
		
		<input type="button" value="获取下标等于3的div" id="btn3"/>	<br/>

		<input type="button" value="获取下标小于3的div" id="btn4"/>	<br/>

		<input type="button" value="获取下标大于3的div" id="btn5"/>
		
</body>
</html>

在这里插入图片描述
在这里插入图片描述

8、表单对象属性过滤器

  • 表单对象属性过滤器: 根据表单中dom对象的状态情况,定位dom对象的。
       启用状态, enabled
       不可用状态 disabled
       选择状态, checked 例如radio, checkbox

   $(“选择器 : enabled”)    获取可用的dom对象
   $(“选择器 : disabled”)    获取不可用的dom对象
   $(“选择器 : checked”)    获取选中的dom对象
   $(“选择器 > option : selected”)    获取下拉列表框被选中元素

  例如:
   1. 获取可用的文本框 $(" : text : enabled")
   2. 获取不可用的文本框 $(" : text : disabled")
   3. 获取复选框中被选中的元素 $(" : checkbox : checked")
   4. 获取 所有下拉列表的被选中元素 $(“select > option : selected”); //标签选择器,选择所有的select标签
   5. 获取 指定下拉列表的被选中元素 $("#select001 > option : selected"); //id选择器,选择id=select001的标签

【7-filter2.html】

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>表单对象属性过滤器</title>
	
	<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
	<script type="text/javascript">
		
		//页面所有的dom对象加载完毕之后,执行这个:
		$(function() { 
			
			 $("#btn1").click(function(){
				//获取所有可以使用的text
				var obj  = $(":text:enabled");
				//设置 jquery数组值所有dom对象的value值
				obj.val("hello-----");
			}) 
			
			$("#btn2").click(function(){
				//获取选中的checkbox
				var obj  = $(":checkbox:checked");
				for(var i=0;i<obj.length;i++){
					//alert( obj[i].value);  //dom对象,调用其value属性
					alert( $(obj[i]).val() )  //jquery对象,调用其val()函数
				}
			})
			
			$("#btn3").click(function(){
				//获取select选中的值
				//var obj= $("select>option:selected"); //标签选择器,选择所有的select标签
				var obj = $("#select001>option:selected");//id选择器,选择id=select001的标签
				alert(obj.val());
			})
		})
				
	</script>
	
</head>
<body>
		<p>文本框:</p>
		<input type="text"  id="txt1" value="text1" />					<br/>
		<input type="text"  id="txt2" value="text2" disabled="true"/>	<br/> <!--disabled,不可用的-->
		<input type="text"  id="txt3" value="text3" />					<br/>
		<input type="text"  id="txt4" value="text4" disabled/>			<br/> 
		
		<p>复选框:</p>
		<input type="checkbox" value="游泳" />游泳 						<br/>
		<input type="checkbox" value="健身" checked />健身 				<br/>   <!--checked,默认选中的-->
		<input type="checkbox" value="电子游戏" checked />电子游戏 		<br/>
		
		<p>下拉框:</p>
		<select id="select001">        						 <!--id=select001-->
			<option value="java语言"> java语言 		</option>
			<option value="go语言" selected> go语言 </option>   <!--selected,默认选中的-->
			<option value="python语言">  python语言	</option>
		</select>
	
		<p>功能按钮:</p>
		<input type="button" value="设置可以的text的value是hello-----" id="btn1"/> 	<br/>
		<button id="btn2">显示选中的复选框的值</button>   	<br/> 	 <!--button标签也是按钮,和<input type="button"/>类似-->
		<button id="btn3">显示选中下拉列表框的值</button>	<br/>
</body>
</html>

在这里插入图片描述

9、函数val、text、attr

  1. val
    操作数组中 DOM对象的 【value 属性】
    $ (选择器).val() —————— 获取dom数组中【第一个】对象的 value属性值
    $ (选择器).val(值)—————— 设置dom数组中 所有dom对象的 value属性值 为新值

  2. text
    操作数组中 所有DOM对象的【文本内容】
    $ (选择器).text() —————— 获取数组中 所有dom对象的 文字显示内容,将得到内容【拼接一个字符串】返回
    $ (选择器).text(值)—————— 设置数组中 所有dom对象的 文字显示内容 为新值

  3. attr
    对 val, text 之外的属性的 获取或设置
    $ (选择器).attr(“属性名”) —————— 获取dom数组中【第一个】对象的 属性值
    $ (选择器).attr(“属性名”,“值”)—————— 设置dom数组中 所有dom对象的 属性值 为新值

【8-val、text、attr函数.html】

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>函数val、text、attr的使用</title>
	<style type="text/css">
		div{
			background: bisque;
		}
	</style>
	
	<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
	<script type="text/javascript">
		
		//页面所有的dom对象加载完毕之后,绑定事件:
		$(function(){
			
			$("#btn1").click(function(){
				//1、$(选择器).val()—————— 获取dom数组中【第一个】对象的 value属性值
				var value = $(":text").val();   //$(":text") ,表单选择器  选择所有的单行文本框
				alert(value);
			})
			
			$("#btn2").click(function(){
				//2、$(选择器).val(值)—————— 设置dom数组中 所有dom对象的 value属性值 为新值
				$(":text").val("三国演义")
			})
			
			$("#btn3").click(function(){
				//3、$(选择器).text()——————获取数组中 所有dom对象的 文字显示内容,将得到内容【拼接一个字符串】返回
				var texts= $("div").text();
				alert(texts);
			})
			
			$("#btn4").click(function(){
				//4、$(选择器).text(值)——————设置数组中 所有dom对象的 文字显示内容 为新值
				$("div").text("新的div文本内容");
			})
			
			$("#btn5").click(function(){ 
				var texts= $("div:first").text(); // 也可以通过 过滤器 获取指定的div的文本内容
				alert(texts);
			})		
				
			$("#btn6").click(function(){
				//5、$(选择器).attr(“属性名”)——————获取dom数组中 【第一个】对象的 属性值
				alert(    $("img").attr("src")   );  //获取第一个图片的src属性值
			})	
					
			$("#btn7").click(function(){
				//6、$(选择器).attr(“属性名”,“值”)——————设置dom数组中 所有dom对象的 属性值 为新值
				$("img").attr("src","img/ex3.jpg") ; //设置所有图片的src属性 为新值
			})					
		})
	</script>

</head>
<body>
	<p>文本框:</p>
	<input type="text" value="刘备" />	<br/>
	<input type="text" value="关羽" />	<br/>
	<input type="text" value="张飞" />	<br/>
	
	<p>div块:</p>
	<div>我是第一个div</div>	<br/>
	<div>我是第二个div</div>	<br/>
	<div>我是第三个div</div>	<br/>

	<p>图片:</p>
	<img src="img/ex1.jpg" id="img1" />	<br/>
	<img src="img/ex2.jpg" id="img2" />	<br/>
	
	<p>功能按钮:</p>
	<button id="btn1">获取第一个文本框的值		</button>	<br/>
	<button id="btn2">设置所有文本框的value值	</button>	<br/><br/>
	
	<button id="btn3">获取所有div的文本值		</button>	<br/>
	<button id="btn4">设置所有div的文本值 为新值	</button>	<br/>
	<button id="btn5">获取第一个div的文本值 		</button>	<br/><br/>
	
	<button id="btn6"> 获取第一个图片的src属性值   	</button>	<br/>
	<button id="btn7"> 设置所有图片的src属性值 为新值  	</button>	<br/>
	
</body>
</html>

在这里插入图片描述

10、函数hide、show、remove、empty、append、html、each

  1. hide
    $(选择器).hide() —————— 将数组中 所有DOM对象 隐藏起来

  2. show
    $(选择器).show() —————— 将数组中 所有DOM对象 在浏览器中显示起来

  3. remove
    $(选择器).remove() —————— 将数组中 所有DOM对象及其子对象 一并删除

  4. empty
    $(选择器).empty() —————— 将数组中 所有DOM对象的子对象 删除

  5. append
    $(选择器).append(“子对象”)——————为数组中 所有DOM对象 添加子对象

  6. html
    $ (选择器).html() —————— 获取 DOM数组中 【第一个元素的】 内容(innerHTML)
    $ (选择器).html(值)—————— 设置 DOM数组中 所有元素的 内容(innerHTML)
    (--------------------对比与上面的text函数区别-----------------------)

  7. each
    (1)语法1:$.each( 要遍历的对象, function(index,element) { 处理程序 } )

     	可以对 数组、json、dom数组循环处理,对每个成员都会调用一次处理函数。
    
     		var arr = [1, 2, 3]			//数组
     		var json = {"name":"张三","age":20 }	//json对象
     		var obj = $(":text");			//dom数组 ,也是jQuery对象
    
     		之前js循环数组:
     			var  arr = [ 11, 12, 13];
     			for(var i=0;i<arr.length;i++){
     				var item = arr[i]; //数组成员
     				alert("下标为"+i+ ",成员为"+item)
     			}
     		
     		现在可以:
     			var  arr = [ 11, 12, 13];
     			$.each(arr, function(i, item){
     				alert("下标为"+i + ",成员为"+item);
     			})
    

(2)语法2:jQuery对象.each( function( index, element ) { 处理程序 } )

		循环jquery对象, jquery对象就是dom数组
		所以说,这种方式和上面那种方式是等价的,只不过要遍历的对象必须为jQuery对象

【9-hide、show、remove、empty、append、html、each函数.html】

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>第二部分函数</title>
	
	<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
	<script type="text/javascript">
		
		//在dom对象创建好后(页面加载完毕之后),绑定事件
		$(function(){
			
			$("#btn1").click(function(){
				// 1、$(选择器).hide() —————— 将数组中 所有DOM对象 隐藏起来
				$(":text").hide();
			})
			
			$("#btn2").click(function(){
				// 2、$(选择器).show()  —————— 将数组中 所有DOM对象 在浏览器中显示起来
				$(":text").show();
			})
			
			$("#btn3").click(function(){
				//3、$(选择器).empty()  —————— 将数组中 所有DOM对象的子对象 删除
				$("select").empty();
			})		
			
			$("#btn4").click(function(){
				// 4、$(选择器).remove() —————— 将数组中 所有DOM对象及其子对象 一并删除
				$("select").remove();
			})	
									
			$("#btn5").click(function(){
				// 5、$(选择器).append("子对象")——————为数组中 所有DOM对象 添加子对象		
				$("div").append("<table border=1><tr><td>第一列</td><td>第二列</td></tr></table>");
				// $("#father1").append("<input type='text' value='添加的input'/> "); //只给一个对象添加子对象
			})	
						
			$("#btn61").click(function(){
				//6.1 $(选择器).html()  —————— 获取 DOM数组中 第一个匹元素的 内容(innerHTML)	
				alert( $("span").html() ); // 我是mysql <b>数据库</b>
				
				//alert( $("span").text() ); // 我是mysql数据库  我是jdbc  
			})	
			
			$("#btn62").click(function(){
				//6.2 $(选择器).html(值)—————— 设置 DOM数组中 所有元素的 内容(innerHTML)
				$("span").html("我是新的<b>数据</b>");
				
				//$("span").text("我是新的<b>数据</b>");
			})
			
		//7.  each语法1: $.each( 要遍历的对象, function(index,element) { 处理程序 } )
				
			$("#btn71").click(function(){
				//循环普通数组
				var  arr = [ 11, 12, 13];
				$.each(arr, function(i,n){
					alert("下标为"+i + "=====数组成员:"+ n);
				})
			})
			
			$("#btn72").click(function(){
				//循环json
				var json={"name":"张三","age":20};										
				$.each(json,function(i,n){
					alert("key="+i+"----》值="+n);
				})
			})
			
			$("#btn73").click(function(){
				//循环dom数组
				var domArray = $(":text");//dom数组				
				$.each( domArray, function(i,n){
					// n 是数组中的dom对象
					alert("i="+i+"  , n="+n.value);
				})
			})
				
		//each语法2:jQuery对象.each( function( index, element ) { 处理程序 } )		
			$("#btn74").click(function(){
				//循环jquery对象, jquery对象就是dom数组
				$(":text").each(function(i,n){
					alert("i="+i+",n="+ n.value);
				})
			})	
										
		})
	</script>
	
</head>
<body>

	<input type="text" value="第 1 个文本框" id="text1"/> 	
	<input type="text" value="第 2 个文本框" id="text2"/> 	<br/><br/>
	
	<select>
		<option value="老虎">老虎</option>
		<option value="狮子">狮子</option>
		<option value="豹子">豹子</option>
	</select>								
	<select>
		<option value="亚洲">亚洲</option>
		<option value="欧洲">欧洲</option>
		<option value="美洲">美洲</option>
	</select>									<br/><br/>
	
	<div id="father1" style="background: yellow;">父div1</div>  <br/>
	<div id="father2" style="background: yellow;">父div2</div>  <br/>
	
	<span> 我是mysql <b>数据库</b>  </span>  <br/>
	<span> 我是jdbc                 </span>  <br/><br/>

	<hr/>
	<button id="btn1">使用hide() 隐藏 所有的文本框</button>						<br/><br/>
	<button id="btn2">使用show() 显示 所有的文本框</button>						<br/><br/>
	
	<button id="btn3">使用entry() 删除 所有下拉列表中option子标签(子)</button>	<br/><br/>
	<button id="btn4">使用remove() 删除 所有下拉列表(父和子)</button>			<br/><br/>
	
	<button id="btn5">使用append("子对象") 给所有div 添加 子对象</button>			<br/><br/>
	
	<button id="btn61">使用html()----获取 第一个span的 内容(innerHTML)</button>		<br/>
	<button id="btn62">使用html(值)--设置 所有span的 内容(innerHTML)  </button>		<br/><br/>
	
	<button id="btn71">each循环 语法1:循环普通数组[11,12,13]   </button>			<br/>	 
	<button id="btn72">each循环 语法1:循环json:{"name":"张三","age":20}  </button>	<br/>	
	<button id="btn73">each循环 语法1:循环dom数组:所有的文本框的值   </button>		<br/>	 
	
	<button id="btn74">each循环 语法2:循环jquery对象(也就是dom数组):所有的文本框的值    </button>	<br/>
</body>
</html>

在这里插入图片描述

11、使用jquery的函数,实现ajax请求的处理

jQuery 提供多个与 AJAX 有关的方法。通过 jQuery AJAX 方法,能够使用 HTTP Get 和 HTTP Post 从远程服务器上请求文本、HTML、XML 或 JSON ,同时能够把接收的数据 更新到 DOM 对象。

没有jquery之前,使用XMLHttpRequest做ajax ,有4个步骤。
而jquery简化了ajax请求的处理。使用 3 个函数可以实现ajax请求的处理:
    1) $.ajax() : jquery中实现ajax的核心函数
    2) $.get() : 使用 get 方式发送ajax请求
    3) $.post() : 使用 post 方式发送ajax请求
注: $.get()和 $.post() 他们在内部都是调用的 $.ajax()

  • 1、 $ .ajax
    语法: $.ajax( { name:value, name:value, … } )

    说明:参数是 json 的数据,包含请求方式,数据,回调方法等
    
    常用的参数:
    	url:	发送请求的 URL。
    	type:	请求的类型(GET 或 POST 等)。默认是 GET。 get,post 不用区分大小写
    	async:	布尔值,表示请求是否异步处理。默认是 true
    
    	contentType :  发送数据到服务器时,所使用的内容类型。默认是:"application/x-www-form-urlencoded"。也可以写"application/json"
    	
    	data:		发送到服务器的数据。有string、数组、 json
    
    	dataType:	期望 服务器返回的数据类型。有"xml" 、"html"、"text"、"json"
    
    	success(result,status,xhr):	请求成功时运行的函数。3个参数 是自定义的形参名,xhr 是 XMLHttpRequest 对象。
    					        之前使用XMLHttpRequest对象, 当readyState==4 && status==200的时候。
    
    	error(xhr,status,error):	请求失败要运行的函数。3个参数是自定义的形参名。
    
    	【主要使用的是 url , data , dataType, success ,其他的都有默认值,可以不写】
    
        例如:	$.ajax(	{	
    						url: "bmiAjaxServlet",						
    						type: "get",		
    						async: true ,		
    			
    						contentType: "application/json", 
    						data: {name:"lisi",age:20 },	
    						dataType: "json",		
    
    						success: function( data ) {
    				
    						},
    
    						error: function(){		
    			
    						}
    			} )
    
  • 2、 $ .get()
    语法:$.get(url,data,function(data,status,xhr),dataType)

    参数说明:
    	1)url 必需。规定您需要请求的 URL。
    
    	2)data 可选。规定连同请求发送到服务器的数据。
    
    	3)function(data,status,xhr)可选。请求成功时运行的函数。data,status,xhr 是自定义形参名。
    	
    		data - 返回的结果数据
    		status - 请求的状态("success"、"notmodified"、"error"、"timeout"、"parsererror")
    		xhr - 包含 XMLHttpRequest 对象
    
    	4)dataType 可选。期望 服务器返回的数据类型。有"xml" 、"html"、"text"、"json"
    
  • 3、$ .post()
    语法:$ .post(url,data,function(data,status,xhr),dataType)
    参数同$.get()

  • 【实例:】使用jQuery实现ajax请求

    把Module【ajax-3-queryProvince(根据省份id查询省份名称)】复制一份,为【jquery-4-queryProvince(jquery版)】
    	(复制模块的方法,在学习JavaWeb的 EL表达式 的笔记里有记载)
    在该模块的web下面新建文件夹:js。在里面粘贴jQuery的js库文件【jquery-3.4.1.js】
    在web下面新建 JqueryAjax.jsp,把searchJson.jsp的代码复制过来,进行修改
    
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>使用jQuery实现ajax请求</title>

    <!-- 指定jquery的库文件位置 -->
    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
    <script type="text/javascript">
        //在所有dom对象创建好后(页面加载完毕之后),绑定事件
        $(function () {
            $("#btn").click(function () {
                //获取dom的value值------用户输入的省份编号
                var value = $("#provinceId").val();
                //发起ajax请求:
                $.ajax({
                    url:"queryjson",
                    data:{
                        provinceId:value
                    },
                    dataType:"json",  //期望服务器返回数据的类型
                    success: function(data) {   //返回的数据data是json对象
                        $("#provinceName").val(data.name); //给对应的id=provinceName的标签 赋值
                        $("#jiancheng").val(data.jiancheng);
                        $("#shenghui").val(data.shenghui);
                    }
                })
            })
        })
    </script>

</head>
<body>

<h2>使用jQuery实现ajax请求</h2>
<table>
    <tr>
        <td>省份编号:</td>
        <td><input type="text" id="provinceId">
            <input type="button" value="搜索" id="btn">  <!-- 指定一个id=btn,以便在上面给它绑定事件 -->
        </td>
    </tr>
    <tr>
        <td>省份名称:</td>
        <td><input type="text" id="provinceName"></td>
    </tr>
    <tr>
        <td>简称:</td>
        <td><input type="text" id="jiancheng"></td>
    </tr>
    <tr>
        <td>省会:</td>
        <td><input type="text" id="shenghui"></td>
    </tr>
</table>

</body>
</html>
public class QueryJsonServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //默认值, {} :表示json格式的数据
        String json = "{}";

        //1.获取请求参数信息中的id属性
        String s = request.getParameter("provinceId");
        String provinceId =s.trim(); //trim() 方法用于删除字符串的头尾空格。

        //2.调用Dao推送查询命令得到这个id对应的省份信息
        ProvinceDao dao = new ProvinceDao();
        Province province =new Province();
        if( provinceId != null && ! provinceId.isEmpty() ){  //isEmpty()判断字符串是否为""空字符串。
            province = dao.queryProvinceById(Integer.valueOf(provinceId));

            //需要使用jackson 把  Provice对象转为  json格式的字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!
            ObjectMapper om  = new ObjectMapper();
            json =  om.writeValueAsString(province);
        }

        //3、把获取的数据,通过网络传给ajax中的异步对象,响应结果数据
        //指定服务器端(servlet)返回给浏览器的是json格式的数据,json数据使用utf-8编码的
        //response.setContentType("text/json;charset=utf-8");
        response.setContentType("application/json;charset=utf-8");
        PrintWriter pw  = response.getWriter();
        pw.println(json); //返回数据
        pw.flush();
        pw.close();
    }
}

在这里插入图片描述

12、【实例】使用 AJAX 级联查询

最终效果:
在浏览器页面中,点击【下拉框1】,可以选择不同的省份,点击一个省份之后,旁边的【下拉框2】,随即变为该省份所对应的所有城市,供用户再进行选择城市
在这里插入图片描述
在这里插入图片描述
实现步骤:

1、IDEA中创建一个web项目
	new-Module-【jquery-5-Ajax实现 级联查询】

2、在WEB-INF下面新建目录:lib。
	然后把mysql的驱动jar包,还有jackson的jar包粘贴进去
	然后分别右键jar包,点击【Add as Library...】 (如果之前在其他module添加过,就不用了)
	
3、设置模块的依赖
	File - Project Structure窗口,点击左边的Modules,在中间选中该模块,在右边的【Dependencies】添加依赖关系:
	看是否有指定的jdk,如果没有就选择一个;然后再给该模块指定相关的jar包:点击右边的+加号,
	选择【2 Library】,然后给它选择相关jar包(Tomcat、mysql、jackson) - Add Selected- 点击Apply		
	
	继续在File - Project Structure - 选择左边的Problems - 在右边点击Fix
	
4、在Web下面创建目录 js ,拷贝jquery-3.4.1.js

5、开始代码书写:
	JDBC工具类:com.yuming.util.JdbcUtil 封装连接数据库
	
	实体类:com.yuming.entity.Province 省份
	   	   com.yuming.entity.City 城市

	Dao类:	com.yuming.dao.QueryDao 两个方法:查询数据库中所有省份list;根据省份id查询省份对应的城市list
	
	Servlet类:com.yuming.controller.QueryProvinceServlet  查询省份的Servlet
		      com.yuming.controller.QueryCityServlet  查询省份对应城市的Servlet

	查询页面:index.jsp【重点!!!】
	
6、查询页面【级联查询】所用知识点:

	jquery的$.ajax() 做ajax请求
	jquery的$.post() 做ajax请求

	empty()函数	做清空子对象
	append()函数	做添加子对象
	each()函数	做遍历
	val()函数	获取value属性值

	jquery中给dom对象绑定事件:click事件、change事件

	表单对象过滤器----$("选择器 > option : selected")  获取下拉列表框被选中元素
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>省市 级联查询,使用ajax和jquery</title>

    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
    <script type="text/javascript">

        function loadDataAjax(){  //自定义函数,获取省份的下拉列表
            //做ajax请求,使用jquery的$.ajax()
            $.ajax({
                url: "queryProvince",
                dataType: "json",//期望返回的数据类型
                success: function (data) {//返回data是json格式的数组:
                    // [{"id":1,"name":"河北","jiancheng":"冀","shenghui":"石家庄"},{},{},{}......]

                    //以免多次点击按钮,添加多次数据到下拉框里面,首先将原来下拉框下面的选项 清空,再给他添加
                    $("#province").empty();
                    $("#province").append(
                        "<option value=\"0\">请选择...</option>"
                    );
                    $.each(data, function (i, n) {
                        //为下拉框添加 子对象(选项)
                        $("#province").append(
                            "<option value='" + n.id + "'>" + n.name + "</option>"
                        )
                    })
                }
            })
        }

        $(function () {
            //  $(function())是在页面的dom的对象加载成功后(页面加载完毕之后)执行的函数, 。

            loadDataAjax(); //调用函数,发起ajax。应该页面打开之后就看到所有的省份下拉列表了

            /*
            $("#btn1").click(function () {  //绑定事件:单击按钮获取省份
                loadDataAjax();
            })
            */

            //给省份的select绑定一个change事件,当select内容发生变化时,触发事件
            $("#province").change(function () {
                //怎样获取选中的列表框的值?
                // 1、表单对象过滤器----$("选择器 > option : selected")  获取下拉列表框被选中元素
                // 2、jquery的val()函数,获取dom对象的value属性值
                var v = $("select>option:selected").val()

                //做一个ajax请求,获取该省份的所有城市信息----这里使用了jquery的$.post(),  $.get()也可以
                $.post(
                    "queryCity",        //1、url
                    { provinceId:v},    //2、data
                    function(resp) {    //3、请求成功时运行的函数
                        //清空select列表
                        $("#city").empty();
                        $.each( resp, function(i,n){
                            $("#city").append(
                                "<option value='"+n.cId+"'>"+n.cName+"</option>"
                            )
                        })
                    },
                    "json"   //4、期望 服务器返回的数据类型
                )
            })

        })
    </script>

</head>
<body>

<p>省市 级联查询,使用ajax和jquery</p>

<div>
    <table border="1">

        <tr>
            <td>省份:</td>
            <td>
                <select id="province">
                    <option value="0">请选择...</option>
                </select>
                <!--<input type="button" value="获取省名列表" id="btn1"/> -->
            </td>
        </tr>

        <tr>
            <td>城市:</td>
            <td>
                <select id="city">
                    <option value="0">请选择...</option>
                </select>
            </td>
        </tr>

    </table>
</div>

</body>
</html>

【思维导图】

在这里插入图片描述

传送门

上一章:Web进阶 - AJAX

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值