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学习笔记(三)

时间: 2024-09-30 21:47:12

Ajax学习笔记(三)的相关文章

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

angular学习笔记(三十一)-$location(2)

之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍的是基于angular-1.3.2版本的,低版本的$location可能会有问题. hashbang模式和history api创建单页应用 首先,$location是用在单页应用里的...(废话,angular就是用在单页的)...所以,$location处理的是url改变,但是不刷新页面的情况.

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

OpenCV for Python 学习笔记 三

给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left,right: 分别表示四个方向上边界的长度 borderType: 边界的类型 有以下几种: BORDER_REFLICATE # 直接用边界的颜色填充, aaaaaa | abcdefg | gggg BORDER_REFLECT # 倒映,abcdefg | gfedcbamn | nmabcd

[ajax 学习笔记] json数据格式

之前写过ajax传送数据可以用普通文本和XML两种格式.这里记一下json数据格式. json:javascript object notation. 之前分析过,用文本和XML传送数据各有优劣.而json可以轻松地将javascript对象转换成可以随时发送的数据. 一个json数据例子: var people = { "programmers": [ { "firstName": "Brett", "lastName":&

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列

swift学习笔记(三)关于拷贝和引用

在swift提供的基本数据类型中,包括Int ,Float,Double,String,Enumeration,Structure,Dictionary都属于值拷贝类型. 闭包和函数同属引用类型 捕获则为拷贝.捕获即定义这些常量和变量的原作用域已不存在,闭包仍然可以在闭包函数体内引用和修改这些值 class属于引用类型. Array的情况稍微复杂一些,下面主要对集合类型进行分析: 一.关于Dictionary:无论何时将一个字典实例赋给一个常量,或者传递给一个函数方法时,在赋值或调用发生时,都会

加壳学习笔记(三)-简单的脱壳思路&amp;调试思路

首先一些windows的常用API: GetWindowTextA:以ASCII的形式的输入框 GetWindowTextW:以Unicaode宽字符的输入框 GetDlgItemTextA:以ASCII的形式的输入框 GetDlgItemTextW:以Unicaode宽字符的输入框 这些函数在使用的时候会有些参数提前入栈,如这函数要求的参数是字符串数目.还有大小写啦之类的东西,这些东西是要在调用该函数之前入栈,也就是依次push,就是说一般前面几个push接着一个call,那前面的push可能

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没