Ajax学习笔记(三)

三、jQuery库详解
1、使用jQuery之后,javascript操作的不再是HTML元素对应的DOM对象,而是包装DOM对象的jQuery对象。js通过调用jQuery对象的方法来改变它所包装的DOM对象的属性,从而实现动态更新HTML页面。
  由此可见,使用jQuery动态更新HTML页面只需以下两个步骤:
  (1)获取jQuery对象。jQuery对象通常是DOM对象的包装
  (2)调用jQuery对象的方法来改变自身。当jQuery对象被改变时,jQuery包装的DOM对象随之改变,HTML页面的内容也就随之改变了。
2、一个入门小案例
<body>
	<div id="zpc1"></div>
	<div id="zpc2"></div>
	<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
	<script>
	//获取所有<div../>标签对应的DOM对象
	$("div").append("新增的内容");
	//使用HTML字符创建一个DOM对象,并将其添加到body元素中
	$("<input type='button' value='单击我'/> ").appendTo(document.body);
	//直接将一个DOM对象包装成jQuery对象
	$(document.getElementById('zpc2'))
		.css("background-color","#aaffaa")
		.css("border","1px solid blue");
	//指定页面加载完成后执行的函数
	$(function(){
	alert("页面加载完成");
	});
	</script>
  </body>
3、以CSS选择器访问DOM元素 
   每个CSS选择器可以对应一个或多个HTML元素,如果以CSS选择器作为$()函数的参数,$(selector)将可以获取该选择器对应的一个或多个HTML元素包装成的jQuery对象。
例程:
	<body>
		<ul>
			<li id="java">
				疯狂Java讲义
			</li>
			<li id="javaee" class="test">
				疯狂JavaEE讲义
			</li>
			<li id="ajax">
				疯狂Ajax讲义
			</li>
			<li id="xml">
				疯狂XML讲义
			</li>
			<li id="hadoop">
				疯狂Hadoop讲义
			</li>
			<li >
				<span id="workflow">疯狂workflow讲义</span>
			</li>
		</ul>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		//获取id为java的元素
		$("#java").append("<b>是id为java的的元素</b>");
		//获取所有包含id属性的<li.../>元素,为他们添加背景色
		$("li[id]").css("background-color","#bbbbff");
		//获取Class属性为test的元素,为他们增加边框
		$(".test").css("border","3px dotted black");
		//同时获得id为xml\workflow的元素
		$("#xml,#workflow").append("<b>是id为xml或workflow其中之一的元素</b>");
		//获取ul之内id为workflow的元素
		$("ul #workflow").append("<br/><b>是位于ul之内、id为workflow的子元素</b>");
		//获取ul之内id为ajax的直接子元素
		$("ul>#ajax").append("<b>位于ul之内,id为ajax的子元素</b>")
	       .css("border","2px solid black");
		//获取id为ajax之后的所有li元素
		$("#ajax~li").css("background-color","#ff5555");
		</script>
	</body>
4、表单相关选择器
Jquery提供了专门匹配各种表单控件的选择器
5、jQuery操作数组的工具方法
   jQuery的$()函数都返回一个类似数组的jQuery对象,jQuery提供了如下几个常用方法操作类数组的jQuery对象。
例程:jQuery操作数组
  	<body>
		<div>
			<div id="java">
				疯狂Java讲义
			</div>
			<div id="javaee" class="test">
				疯狂JavaEE讲义
			</div>
			<div id="ajax">
				疯狂Ajax讲义
			</div>
			<div id="xml">
				疯狂XML讲义
			</div>
			<div id="hadoop">
				疯狂Hadoop讲义
			</div>
			<div >
				<span id="workflow">疯狂workflow讲义</span>
			</div>
		</div>	
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		//获取div之内所有的div元素,并迭代处理每个元素
		$("div>div").each(function(i){
		this.innerHTML+="添加的内容"+i;
		});
		//返回div之内的所有div元素的个数
		document.writeln($("div>div").length+"<br/>");
		//获取div之内的第四个div元素包装成的jQuery对象
		document.writeln($("div>div").eq(3).html()+"<br/>");
		//获取div之内的第二个div元素(注意:返回的是DOM对象)
		document.writeln($("div>div").get(1).innerHTML+"<br/>");
		//获取id为java的div元素,注意:$("#java").get()返回一个数组,下面第一行输出1
		document.writeln($("#java").get().length+"<br/>");
		document.writeln($("#java").get()[0]+"<br/>");
		//获取所有div之内id为hadoop的div索引(下面两行输出一样)
		document.writeln($("div>div").index($("#hadoop").get(0))+"<br/>");
		document.writeln($("div>div").index($("#hadoop"))+"<br/>");
		document.writeln(jQuery("#hadoop").html());
		</script>
	</body>
6、jQuery对象和DOM对象间可以相互转化:jQuery对象的get()、get(index)方法返回DOM对象,$()和jQuery()方法返回jQuery对象
7、对jQuery对象进行过滤的相关方法
   例程:
  	<body>
		<div>
			<div id="java">
				疯狂Java讲义
			</div>
			<div id="javaee" class="test">
				经典企业级JavaEE应用框架讲义
			</div>
			<div id="ajax">
				疯狂Ajax讲义
			</div>
			<div id="xml">
				疯狂XML讲义
			</div>
			<div id="hadoop">
				疯狂Hadoop讲义
			</div>
			<div >
				<span id="workflow">疯狂workflow讲义</span>
			</div>
		</div>	
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		$("div>div").filter("#ajax").css("background-color","#aaaaaa");
		//将div之内的div元素映射成另一个数组
		$("div>div").filter(function(){
			return this.innerHTML.length>20;	
		}).css("border","1px solid red");
		var t=$("div>div").map(function(i){
			return i;
		});
		for(var i=0;i<t.length;i++)
		document.writeln(t[i]);
		//下面两行输出一样
		document.writeln($("div>div").eq(1).html()+"<br/>");
		document.writeln($("div>div").get(1).innerHTML+"<br/>");
		</script>
	</body>
8、jQuery提供了类似DOM导航的方法,可以更加便捷地访问当前结点的兄弟结点、父节点和子节点,
   而且这些方法的返回值依然是jQuery对象,因此可以直接调用jQuery对象提供的工具方法。
例程:
 
<body>
		<div>
			<div id="java">
				疯狂Java讲义
			</div>
			<div id="javaee" class="test">
				经典企业级JavaEE应用框架讲义
			</div>
			<div id="ajax">
				疯狂Ajax讲义
			</div>
			<div id="xml">
				疯狂XML讲义
			</div>
			<div id="hadoop">
				疯狂Hadoop讲义
			</div>
			<div >
				<span id="workflow">疯狂workflow讲义</span>
			</div>
		</div>	
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
			//获取div之内的所有内容(包括结点和文本),实际返回div下的6个div
			$("div").contents().css("background-color","#dddddd");
			//获取id为ajax的结点的下一个兄弟结点
			$("#ajax").next().css("border","3px dotted blue");
			//获取id为ajax的结点的上一个兄弟结点
			$("#ajax").prev().css("border","2px solid black");
			//获取id为ajax结点的id为java的兄弟结点
			$("#ajax").siblings("#java").append("<b>是id为ajax的节点的兄弟结点(且其id为java)</b>");
			//取出所有div元素的父元素,将会输出body元素内容和包含6个div元素的父div内容
			$("div").parent().each(function(){
			alert($(this).html());
			});
		</script>
	</body>

9、链接方法
例程:
  	<body>
		<div>
			<div id="java">
				疯狂Java讲义
			</div>
			<div id="javaee" class="test">
				经典企业级JavaEE应用框架讲义
			</div>
			<div id="ajax">
				疯狂Ajax讲义
			</div>
			<div id="xml">
				疯狂XML讲义
			</div>
			<div id="hadoop">
				疯狂Hadoop讲义
			</div>
			<div >
				<span id="workflow">疯狂workflow讲义</span>
			</div>
		</div>	
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
			//获取id为java的节点的下一个兄弟结点,再将id为java的结点与此结点连为一体
			//实际返回id为java的结点以及它的下一个结点
			$("#java").next().andSelf().css("border","2px solid blue");
			//先获取xml的下一个结点,再使用end()方法重新获取之前的xml结点
			$("#xml").next().end().css("background-color","#ffaaaa");
		</script>
	</body>
10、jQuery支持的方法(jQuery()和$()的效果一样、jQuery和$效果一样)
    注意:jQuery.unique(array):删除array数组中的重复值。该array通常是DOM对象数组,如果是普通字符串或数值型数组将不起作用。
    使用jQuery命名空间的属性和方法
     如:jQuery.browser、jQuery.trim(str)、jQuery.unique(array)
     虽然jQuery命名空间下提供的这些工具方法不是用于DOM操作,而是用于操作普通的字符串、数组和对象的,但这些方法简化了js编程。  
    例程:
  	<body >
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
			var target=$("<div>java</div>");
			target.css("background-color","red");
			$("body").append(target);
			target.data("book","hadoop权威指南");		
			target.each(function(i){
			document.writeln(i+":"+target[i]);
		});
			alert(target.data("book"));
			target.removeData("book");
			alert(target.data("book"));
		</script>
	</body>
11、jQuery允许把jQuery对象当做一个临时的“数据存储中心”,可以将数据(可以是基本类型或者js对象)以key-value的形式存储到jQuery对象里。
例程:
 	<body >
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
			var target=$("<div>java</div>");
			target.css("background-color","red");
			$("body").append(target);
			target.data("book1","hadoop权威指南");	
			target.data("book2","HBase权威指南");	
			target.each(function(i){
			document.writeln(i+":"+target[i]);
		});
			document.writeln("<br/>"+target.length+"<br/>");
			document.writeln(target.data("book1")+"<br/>");
			document.writeln(target.data("book2")+"<br/>");
			target.removeData("book1");
			document.writeln(target.data("book1")+"<br/>");
			document.writeln(target.data("book2"));
		</script>
	</body >
12、操作DOM对象属性的相关方法
13、操作DOM元素的CSS属性的相关方法
14、操作元素内容的相关方法
例程:
  	<body >
  	<div></div><div></div>
  	<input id="book" name="book" type="text"/></br>
  	<input id="desc" name="desc" type="text"/></br>
  	<select id="gender">
  	 <option id="p1" value="male">男人</option>
  	<option id="p2" value="female">女人</option>
  	</select><br/>
  	<select id="publish">
  	 <option id="p3" value="phel">电子工业出版社</option>
  	<option id="p4" value="tsinghua">清华大学出版社</option>
  	</select><br/>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
			//设置body下div元素的内容
			$("body>div").html("body下div元素的内容");
			//设置所有的input、select和textarea的值
			$(":input").val("疯狂Java讲义");
			//为所有<select.../>元素设置value值,即默认值
			$("select").val(["female","phel"]);
			//仅获取jQuery元素的text部分,下面将输出"java:疯狂Java讲义"
			document.writeln($("<div>java:<span>疯狂java讲义</span></div>").text()+"<br/>");
			for(var i=1;i<=4;i++){
				document.writeln($("#p"+i).val());
			}
			for(var i=1;i<=4;i++){
				document.writeln($("#p"+i).html()+"<br/>");
			}
		</script>
	</body>
15、操作DOM结点的相关方法
(1)在指定结点内插入新的结点:append(content)在jQuery对象包含的所有DOM结点的尾部插入;appendTo(selector):将jQuery对象包含的DOM元素添加到selector匹配的所DOM的内部的尾端
(2)prepend(content)、prependTo(selector)与上面的功能相反,即不是插前面,而是插后面
(3)在指定结点外添加新的结点
  	<body >
  	<div id="test1" style="border:1px dotted black;" >id为test1的元素</div>
  	<div id="test2" style="border:1px solid blue;" >id为test2的元素</div>
  	<hr/>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		//下面两行效果一样
		//$("#test2").insertAfter("hr");
		$("hr").after($("#test2"));
		</script>
	</body>
16、jQuery事件相关方法
(1)通用的事件编程相关函数如bind()、hover()、trigger()等
(2)具体事件相关的方法,如:blur、click
$("#test1").click(function(event){
});
17、一些动画效果
   jQuery提供了一些效果方法,可直接使用jQuery对象调用
   例程:
  	<body >
  	<input  type="button" value="toggle" onclick="$('#test1').toggle(1000);" /><br/>
  	<div id="test1" >使用toggle控制的元素</div>
  	<input  type="button" value="slide down" onclick="$('#test2').slideDown(1000);" /><br/>
  	<input  type="button" value="slide up" onclick="$('#test2').slideUp(1000);" /><br/>
  	<div id="test2" >使用slide控制的元素</div>
  	<input  type="button" value="fade in" onclick="$('#test3').fadeIn(1000);" /><br/>
  	<input  type="button" value="fade out" onclick="$('#test3').fadeOut(1000);" /><br/>
  	<div id="test3" >使用Fade控制的元素</div>
  	<div id="div">最后一个元素</div>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		$("#div").css("background-color","red");
		</script>
	</body>
  18、★Ajax相关方法
  (1)例程:将所有表单控件输入元素转化为数组
	<body >
  	<form id="test">
		用户名:<input type="text" id="user" name="user"/><br/>
		个人介绍:<textarea id="desc" name="desc" rows="6" cols="20"></textarea><br/>
		喜欢的图书:<select id="book" name="book">
		<option value="hadoop">Hadoop权威指南</option>
		<option value="nosql">Nosql权威指南</option>
		</select><br/>
		</form>
		
		<input id="bn1" type="button" value="查询字符串"/>
		<input id="bn2" type="button" value="查询JSON对象"/><hr/>
		<span id="show"></span>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		$("#bn1").click(function(){
		 	$("#show").empty();
			$("#show").html($("#test").serialize());
		});
		$("#bn2").click(function(){
			//将所有输入元素转化为数组
			var arr=$(":input").serializeArray();
			$("#show").empty();
			//遍历arr
			for(var index in arr){
				$("#show").append("第"+index+"表单控件名为:"+arr[index].name+",值为:"+arr[index].value+"<br/>");
			}
		});
		</script>
	</body>

(2)使用load方法实现便捷的Ajax交互
	Html页面:
  	<body >
  	<h3>输入你的信息:</h3>
  	<form id="user">
		用户名:<input type="text" id="user" name="user"/><br/>
		喜欢的图书:<select id="book" name="book" multiple="multiple">
		<option value="hadoop">Hadoop权威指南</option>
		<option value="nosql">Nosql权威指南</option>
		<option value="jvm">深入理解JVM</option>
		<option value="java">Thinking in java</option>
		</select><br/>
		<input id="load" type="button" value="load"><br/>
		</form><hr/>
		<div id="show"></div>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		$("#load").click(function(){
			//向pro.jsp发送Ajax请求,并启动服务器响应
			$("#show").load("/Ajax/jQajax1.jsp",$("#user").serializeArray());
			});
		</script>
	</body>

 jsp页面:
<%
	String user=request.getParameter("user");
	String books[]=request.getParameterValues("book");
	//生成HTML字符串响应
	out.println(user+",您好,现在时间是:"+new Date());
	out.println("<br/><h3>您喜欢的书如下:</h5>");
	out.println("<ol>");
	for(int i=0;i<books.length;i++){
		out.println("<li>"+books[i]+"</li>");
	}
	out.println("</ol>");
 %>

(3)使用get/post方法
	<body >
  	<h3>输入你的信息:</h3>
  	<form id="user">
		用户名:<input type="text" id="user" name="user"/><br/>
		喜欢的图书:<select id="book" name="book" multiple="multiple">
		<option value="hadoop">Hadoop权威指南</option>
		<option value="nosql">Nosql权威指南</option>
		<option value="jvm">深入理解JVM</option>
		<option value="java">Thinking in java</option>
		</select><br/>
		<input id="load" type="button" value="load"><br/>
		</form><hr/>
		<div id="show"></div>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
		$("#load").click(function(){
			$("#show").empty();
			//向pro.jsp发送Ajax请求,并启动服务器响应
			$.get("/Ajax/jQajax1.jsp",$("#user").serializeArray(),
			//也可以指定POST请求,防止乱码
			//$.post("/Ajax/jQajax1.jsp",$("#user").serializeArray(),
			//指定回调函数
			function(data,statusText){
				$("#show").append("服务器的响应状态为:"+statusText+"<br/>");
				$("#show").append(data);
			},
			//指定服务器响应为html
			"html"
			);
			});
		</script>
	</body>
(4)让服务器直接生成js脚本
html页面:
	<body>
		<ul style="display: none;">
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
		<input id="get" type="button" value="getScript"/ >
		<div id="show"></div>
		<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
		<script type="text/javascript">
	//為id为get的按钮绑定事件处理函数
	$("#get").click(function() {
		$.getScript("/Ajax/Script.jsp");
	});
	</script>
	</body>
   
jsp页面:只能保留脚本内容
$("ul>li").each(function(index){
	if(index%2==0){
		$(this).css("background-color","#ccffcc");
	}
	$(this).append("服务器响应:"+index);
});
$("ul").slideDown(1000);
19、扩展jQuery:
用户可以通过jQuery.fn.extend(object)和jQuery.extend(object)来为jQuery对象扩展新的方法或为jQuery命名空间扩展新的方法

你可能感兴趣的:(Ajax学习笔记(三))