Java进阶学习第二十七天(JSON基础、jQuery基础)

一、JSON基础

1、JSON的定义
① JSON(Java Script Object Notation)是一种轻量级的数据交换语言,以文本字符串为基础,且易于让人阅读
注意:XML就是一个重量级的数据交换语言
② JSON采用完全独立于任何程序语言的文本格式,使JSON成为理想的数据交换语言

2、JSON的作用
① 简化创建自定义对象的方式
注意:JSON就是用JS语法来书写,所以必须放在

<html>
  <head>
    <title>简化创建自定义对象的方式</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
	<!-- js方式定义Person对象	-->
	<script type="text/javascript">
		function Person(id,name,sal){
			this.id = id;
			this.name = name;
			this.sal = sal;
		}
		var p = new Person(1,"张三",7000);
		document.write("编号:" + p.id + "<br/>");
		document.write("姓名:" + p.name + "<br/>");
		document.write("薪水:" + p.sal + "<br/>");
	</script>
	<hr/>
	<!-- json方式定义Person对象 -->
		<script type="text/javascript">
		//采用js语言来书写
		var p = {id:1,name:"李四",sal:8000};
		//属性可以''或""符号
		//字符串必加''或""符号,其它类型不用加符号
		document.write("编号:" + p.id + "<br/>");
		document.write("姓名:" + p.name + "<br/>");
		document.write("薪水:" + p.sal + "<br/>");
	</script>
  </body>
</html>
<html>
  <head>
    <title>创建一个数组,数组中有三个对象</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
	<script type="text/javascript">
		var ps = [
			{
				id:1,
				name:'张三'
			},
			{
				id:2,
				name:'李四'
			},
			{
				id:3,
				name:'王五'
			}
		];
	</script>
	<script type="text/javascript">
		document.write("共有" + ps.length + "个学生<br/>");
		for(var i=0;i<ps.length;i++){
			document.write("编号:" + ps[i].id + "<br/>");
			document.write("姓名:" + ps[i].name + "<br/>");
		}
	</script>
  </body>
</html>
<html>
  <head>
    <title>创建一个对象,其它一个属性是数组</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
	<script type="text/javascript">
		var p = {
			id:1,
			name:'张三',
			home:['宿迁','镇江','苏州']
		};	
		for(var i=0;i<p.home.length;i++){
			document.write(p.home[i]+"  ");
		}				
	</script>
  </body>
</html>
<html>
  <head>
    <title>创建一个对象,使用function做为属性值</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
	<script type="text/javascript">
		var p = {
			id:1,
			name:'张三',
			isLove:true,
			home:['广州','深圳'],
			show : function(str){
				alert("你是" + str);
			}
		};
		//document.write(p.isLove?"已婚":"单身"+"<br/>");
		p.show("赵君");
	</script>
  </body>
</html>

② 在AJAX中,作为数据载体之一
注意:JS可以直接解析JSON格式的文本,前提是:该JSON必须采用JS格式书写的才行,如果该JSON是采用Java格式写的,必须使用eval()函数转换后,方可被JS解析,该eval("")函数接收一个字符串格式的内容。
③ 省份-城市-区域三级联动【Struts2 + JSON版】
切记:将来JSON是不能完完全全替代XML的,只能在定义对象和数据交换语言方面替代
jsp:

<html>
  <head>
    <title>省份-城市-区域三级联动【Struts2 + JSON版】</title>
    <script type="text/javascript" src="js/ajax.js"></script>
  </head>
  <body>
	<select id="provinceID" style="width:111px">
		<option>选择省份</option>
		<option>湖北</option>
		<option>湖南</option>
		<option>广东</option>
	</select>
	<select id="cityID" style="width:111px">
		<option>选择城市</option>
	</select>
	<select id="areaID" style="width:111px">
		<option>选择区域</option>
	</select>
	
	<!-- 省份->城市 -->
	<script type="text/javascript">
		document.getElementById("provinceID").onchange = function(){
			//清空城市下拉框
			var cityElement = document.getElementById("cityID");
			cityElement.options.length = 1;
			//清空区域下拉框
			var areaElement = document.getElementById("areaID");
			areaElement.options.length = 1;
			var province = this[this.selectedIndex].innerHTML;
			if("选择省份" != province){
				//NO1)
				var ajax = createAJAX();
				//NO2)
				var method = "POST";
				var url = "${pageContext.request.contextPath}/findCityByProvinceRequest?time="+new Date().getTime();
				ajax.open(method,url);
				//NO3)
				ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")
				//NO4)
				var content = "bean.province=" + province;
				ajax.send(content);
				//-------------------------------------------等待
				//NO5
				ajax.onreadystatechange = function(){
					if(ajax.readyState == 4){
						if(ajax.status == 200){
							//NO6)返回JAVA格式的JSON文本
							var jsonJAVA = ajax.responseText;
							//p所代表的是java格式的json文本,是不能直接被js执行的
							//解决方案:将java格式的json文本,转成js格式的json文本
							//如何做:用js提供的一个函数搞定
							var jsonJS = eval("("+jsonJAVA+")");
							var array = jsonJS.cityList;
							var size = array.length;
							for(var i=0;i<size;i++){
								var city = array[i];
								var option = document.createElement("option");
								option.innerHTML = city;
								cityElement.appendChild(option);
							}
						}
					}			
				}
			}
		}
	</script>

	<!-- 城市->区域 -->
	<script type="text/javascript">
		document.getElementById("cityID").onchange = function(){
			var areaElement = document.getElementById("areaID");
			areaElement.options.length = 1;
			var city = this[this.selectedIndex].innerHTML;
			if("选择城市" != city){
				//NO1)
				var ajax = createAJAX();
				//NO2)
				var method = "POST";
				var url = "${pageContext.request.contextPath}/findAreaByCityRequest?time="+new Date().getTime();
				ajax.open(method,url);
				//NO3)
				ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")
				//NO4)
				var content = "bean.city=" + city;
				ajax.send(content);
				//------------------------------------------等待
				//NO5)
				ajax.onreadystatechange = function(){
					if(ajax.readyState == 4){
						if(ajax.status == 200){	
							//NO6)
							var jsonJAVA = ajax.responseText;
							var jsonJS = eval("("+jsonJAVA+")");
							var array = jsonJS.areaList;
							var size = array.length;
							for(var i=0;i<size;i++){
								var area = array[i];
								var option = document.createElement("option");
								option.innerHTML = area;
								areaElement.appendChild(option);
							}
						}
					}
				}	
			}
		}
	</script>
  </body>
</html>

bean.java:

/**
 * 封装省份和城市
 */
public class Bean {
	private String province;//省份
	private String city;//城市
	public Bean(){}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
}

action:

public class ProvinceCityAreaAction extends ActionSupport{
	private Bean bean;
	public Bean getBean() {
		return bean;
	}
	public void setBean(Bean bean) {
		this.bean = bean;
	}
	/**
	 * 根据省份获取城市 
	 */
	public String findCityByProvince() throws Exception {
		cityList = new ArrayList<String>();
		if("湖北".equals(bean.getProvince())){
			cityList.add("武汉");
			cityList.add("赤壁");
		}else if("湖南".equals(bean.getProvince())){
			cityList.add("郴州");
			cityList.add("张家界");
			cityList.add("浏阳");
		}else if("广东".equals(bean.getProvince())){
			cityList.add("阳江");
			cityList.add("清远");
			cityList.add("佛山");
			cityList.add("湛江");
		}
		//让struts2框架帮你将List/Set/Map<String>转成JSON文本
		return SUCCESS;
	}
	
	/**
	 * 根据城市获取区域 
	 */
	public String findAreaByCity() throws Exception {
		areaList = new ArrayList<String>();
		if("阳江".equals(bean.getCity())){
			areaList.add("AA");
			areaList.add("BB");
		}else if("清远".equals(bean.getCity())){
			areaList.add("CC");
			areaList.add("DD");;
		}else if("佛山".equals(bean.getCity())){
			areaList.add("EE");
			areaList.add("FF");
		}else if("湛江".equals(bean.getCity())){
			areaList.add("GG");
			areaList.add("HH");
		}
		return SUCCESS;
	}
	private List<String> areaList;//区域的集合
	private List<String> cityList;//城市的集合
	public List<String> getCityList() {
		return cityList;
	}
	public List<String> getAreaList() {
		return areaList;
	}
}

struts.xml:

<struts>
	<package name="myPackage" extends="json-default" namespace="/">
		<!-- 全局结果类型 -->
		<global-results>
			<result name="success" type="json"/>
		</global-results>
		<action 
			name="checkRequest" 
			class="cn.itcast.javaee.js.checkcode.CheckcodeAction" 
			method="check">
		</action>
		<!-- 省份->城市 -->
		<action 
			name="findCityByProvinceRequest" 
			class="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction" 
			method="findCityByProvince">
		</action>
		<!-- 城市->区域 -->
		<action 
			name="findAreaByCityRequest" 
			class="cn.itcast.javaee.js.provincecityarea.ProvinceCityAreaAction" 
			method="findAreaByCity">
		</action>
	</package>
</struts>

导入:struts2-json-plugin-2.3.1.1.jar

3、使用第三方工具,将JavaBean对象/List或Set或Map对象转成JSON
① 准备导入第三方jar包:
◇ commons-beanutils-1.7.0.jar
◇ commons-collections-3.1.jar
◇ commons-lang-2.5.jar
◇ commons-logging-1.1.1.jar
◇ ezmorph-1.0.3.jar
◇ json-lib-2.1-jdk15.jar
② 最后一个例子切记,将来jQuery-EasyUI-DataGrid组件时我们还要用到,将来在企业中,就算脱离struts2的环境,也能用第三方工具将Java类型转成JSON文本

public class TestBean2Json {
	private static void javabean2json() {
		City city = new City(1,"广州");
		JSONArray jSONArray = JSONArray.fromObject(city);
		String jsonJAVA = jSONArray.toString();
		System.out.println(jsonJAVA);
		//[{"id":1,"name":"广州"}]
	}
	private static void list2json() {
		List<City> cityList = new ArrayList<City>();
		cityList.add(new City(1,"广州"));
		cityList.add(new City(2,"珠海"));
		JSONArray jSONArray = JSONArray.fromObject(cityList);
		String jsonJAVA = jSONArray.toString();
		System.out.println(jsonJAVA);
		//[{"id":1,"name":"广州"},{"id":2,"name":"珠海"}]
	}
	private static void set2json() {
		Set<City> citySet = new LinkedHashSet<City>();
		citySet.add(new City(1,"广州"));
		citySet.add(new City(2,"珠海"));
		JSONArray jSONArray = JSONArray.fromObject(citySet);
		String jsonJAVA = jSONArray.toString();
		System.out.println(jsonJAVA);
		//[{"id":1,"name":"广州"},{"id":2,"name":"珠海"}]
	}
	private static void javabeanlist2json() {
		List<City> cityList = new ArrayList<City>();
		cityList.add(new City(1,"中山"));
		cityList.add(new City(2,"佛山"));
		Province province = new Province(1,"广东",cityList);
		JSONArray jSONArray = JSONArray.fromObject(province);
		String jsonJAVA = jSONArray.toString();
		System.out.println(jsonJAVA);
		/*
		  [
			 {
			  "id":1,
			  "name":"广东"
			  "cityList":[{"id":1,"name":"中山"},{"id":2,"name":"佛山"}],
		     }
		  ]
		  */
	}
	private static void map2json() {
		List<City> cityList = new ArrayList<City>();
		cityList.add(new City(1,"中山"));
		cityList.add(new City(2,"佛山"));
		Map<String,Object> map = new LinkedHashMap<String,Object>();
		map.put("total",cityList.size());//表示集合的长度
		map.put("rows",cityList);//rows表示集合
		JSONArray jSONArray = JSONArray.fromObject(map);
		String jsonJAVA = jSONArray.toString();
		System.out.println(jsonJAVA);
		//[{"total":2,"rows":[{"id":1,"name":"中山"},{"id":2,"name":"佛山"}]}]
		jsonJAVA = jsonJAVA.substring(1,jsonJAVA.length()-1);
		System.out.println(jsonJAVA);
	}
	
	public static void main(String[] args) {
		//javabean2json();
		//list2json();
		//set2json();
		//javabeanlist2json();
		map2json();
	}
}

4、总结JSON的特点
① 在客户端(特指PC浏览器),直接使用JavaScript语言解析JSON,无需第三方jar包
② 本质上,就是一个文本,只是该文本有特定的书写格式
③ 可以使用第三方工具,将JavaBean对象或者List/Set/Map<JavaBean>对象转成JSON
④ 优点:JSON与XML很相似,但是它更加轻巧,服务器只需发送一个html普通字符串,不用发送复杂的xml格式文档了
⑤ 缺点:语法过于严谨,初学者可能觉得代码不易读,写错一点都不行
⑥ JSON本质上,就是用JS语法写的特殊文本记号,用JS可以直接解析

5、模拟jQuery库,体验使用第三方实用库的特点【图片隐藏与显示】
学会:JS的封装思想
学会:创建自定义对象和优化方法
学会:引用第三方实用的库,该库中预定义大量实用的对象和函数
学会:查阅第三方实用的库提供的API手册

 <body>
	<img src="images/zgl.jpg"/>
	<input id="hide" type="button" value="隐藏" style="position:absolute;top:250;left:50"/>
		&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="show" type="button" value="显示" style="position:absolute;top:250;left:120"/>
	
	<script type="text/javascript">
		//定位隐藏按钮,同时提供单击事件
		document.getElementById("hide").onclick = function(){
			//定位图片
			var img = document.images[0];	
			//隐藏图片
			img.style.visibility = "hidden";
		}
		//定位显示按钮,同时提供单击事件
		document.getElementById("show").onclick = function(){
			//定位图片
			var img = document.images[0];	
			//隐藏图片
			img.style.visibility = "visible";
		}
	</script>
  </body>
<body>
	<img src="images/zgl.jpg"/>
	<input id="hide" type="button" value="隐藏" style="position:absolute;top:250;left:50"/>
		&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="show" type="button" value="显示" style="position:absolute;top:250;left:120"/>
	
	<script type="text/javascript">
		function Photo(){
			//相像
			var img = document.images[0];
			//隐藏方法
			this.hide = function(){
				img.style.visibility = "hidden";
			} 
			//显示方法
			this.show = function(){
				img.style.visibility = "visible";
			}
		}
	</script>	
		
	<script type="text/javascript">
		var p = new Photo();
		document.getElementById("hide").onclick = function(){
			p.hide();
		}
		document.getElementById("show").onclick = function(){
			p.show();
		}
	</script>
  </body>
<body>
	<img src="images/zgl.jpg"/>
	<input id="hide" type="button" value="隐藏" style="position:absolute;top:250;left:50"/>
		&nbsp;&nbsp;&nbsp;&nbsp;
	<input id="show" type="button" value="显示" style="position:absolute;top:250;left:120"/>
	
	<script type="text/javascript">
		function Photo(){
			//相像
			var img = document.images[0];
			//隐藏方法
			this.hide = function(){
				img.style.visibility = "hidden";
			} 
			//显示方法
			this.show = function(){
				img.style.visibility = "visible";
			}
		}
	</script>	
		
	<script type="text/javascript">
		//$()表示定位指定的标签
		function $(str){
			//获取str变量的类型
			var type = typeof(str);
			//如果是string类型的话
			if(type == "string"){
				//截取字符串的第一个字符
				var first = str.substring(0,1);
				//如果是#号的话
				if("#" == first){
					//获取#号之后的所有字符串
					var end = str.substring(1,str.length);
					//根据id定位标签
					var element = document.getElementById(end);
					//如果找到了
					if(element != null){
						//返回标签
						return element;
					}else{
						alert("查无此标签");
					}
				}else{
				}
			}else{
				alert("参数必须是字符串类型");
			}
		}
	</script>

	<script type="text/javascript">
		var p = new Photo();
		$("#hide").onclick = function(){
			p.hide();
		}
		$("#show").onclick = function(){
			p.show();
		}
	</script>
  </body>

二、jQuery基础

1、jQuery定义
John Resig在2006年1月发布的一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作

2、为什么要使用jQuery
① 写少代码,做多事情【write less do more】
② 免费,开源且轻量级的js库,容量很小
注意:项目中,提倡引用min版的js库
③ 兼容市面上主流浏览器,例如 IE,Firefox,Chrome
注意:jQuery不是将所有JS全部封装,只是有选择的封装
④ 能够处理HTML/JSP/XML、CSS、DOM、事件、实现动画效果,也能提供异步AJAX功能
⑤ 文档手册很全,很详细
⑥ 成熟的插件可供选择
⑦ 提倡对主要的html标签提供一个id属性,但不是必须的
⑧ 出错后,有一定的提示信息
⑨ 不用再在html里面通过<script>标签插入一大堆js来调用命令了

3、jQuery开发步骤
① 引用第三方js库文件,
② 查阅并使用api手册,$("#divID").html()/val()/text()/css(“color”,“red”)/…

<html>
  <head>
    <title>jQuery入门</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="js/jquery-1.8.2.js"></script>
  </head>
  <body>
	<input id="inputID" type="button" value="这就是jQuery库,写少代码,做多事情"/>
	<div id="divID">哈哈哈</div>
	
	<script type="text/javascript">
		//取得<input>标签中的value属性的内容
		/*js方式
		var inputElement = document.getElementById("inputID");
		var input = inputElement.value;
		alert(input);*/
		/*jquery方式
		var $input = $("#inputID");
		var input = $input.val();
		alert(input);*/
		
		//取得<div>标签中的文本内容
		/*js方式
		var divElement = document.getElementById("divID");
		var div = divElement.innerHTML;
		alert(div);*/
		//jquery方式
		var $div = $("#divID");
		var div = $div.html();
		alert(div);
	</script>
  </body>
</html>

4、js对象和jQuery对象相互转换
① 什么是js对象及代码规则
就是使用js-API,即Node接口中的API或是传统JS语法定义的对象,叫做js对象
js代码规则----divElement
var divElement = document.getElementById(“divID”);
var nameArray = new Array(3);
② 什么是jQuery对象及代码规则
就是使用jQuery-API,返回的对象就叫做jQuery对象
jQuery代码规则----$div
var $div = $("#divID")
声明:上述代码规则,只是个人规则,不代表所有企业都这样做
③ js对象转成jQuery对象【重点】
语法: ( j s 对 象 ) − − − − &gt; j Q u e r y 对 象 例 如 : (js对象)----&gt;jQuery对象 例如: (js)>jQuery(divElement)----> d i v 例 如 : div 例如: div(this)----> t h i s 注 意 : j Q u e r y 对 象 将 j s 对 象 做 了 封 装 , j s 对 象 二 边 无 引 号 ④ j Q u e r y 对 象 转 成 j s 对 象 语 法 1 : j Q u e r y 对 象 [ 下 标 , 从 0 开 始 ] 语 法 2 : j Q u e r y 对 象 . g e t ( 下 标 , 从 0 开 始 ) 例 如 : ‘ this 注意:jQuery对象将js对象做了封装,js对象二边无引号 ④ jQuery对象转成js对象 语法1:jQuery对象[下标,从0开始] 语法2:jQuery对象.get(下标,从0开始) 例如:` thisjQueryjsjsjQueryjs1jQuery[0]2jQuery.get(0)div[0]---->divElement`
注意:不同的对象只能调用对应的api方法,即jQuery对象不能调用js对象的api,反之亦然

<script type="text/javascript">
		//取得<input>标签中的value属性的内容[js对象->jquery对象]
		var inputElement = document.getElementById("inputID");//js对象
		var $input = $( inputElement );//jquery对象
		var input = $input.val();
		alert(input);
	
		//取得<div>标签中的文本内容[jquery对象->js对象]
		var $div = $("#divID");//jquery对象
		//var divElement = $div.get(0);//js对象
		var divElement = $div[0];//js对象
		var div = divElement.innerHTML;
		alert(div);
	</script>

5、js对象和jQuery对象的区别
① js对象的三种基本定位方式
◇ 通过ID属性:document.getElementById()
◇ 通过NAME属性:document.getElementsByName()
◇ 通过标签名:document.getElementsByTagName()
② jQuery对象的三种基本定位方式
◇ 通过ID属性:$("#id属性值")
◇ 通过标签名:$("标签名")
◇ 通过CLASS属性:$(".样式名")
③ js对象出错的显示
没有合理的提示信息
例如:alert(document.getElementById(“usernameIDD”).value)
④ jQuery对象出错的显示
有合理的提示信息,例如:undefined
例如:alert($("#usernameIDD").val())

<body>	
		<input type="text" id="usernameID" value="这就是jQuery库" />
		<div id="divID" class="oneClass">这是div标签中的内容</div>	
		<script type="text/javascript">
	  		//通过"#id"定位<input>
	  		//alert( $("#usernameID").val() );
	  		
	  		//通过"标签名"定位<input><div>
	  		//alert( $("input").val() );
	  		//alert( $("div").html() );
	  		
	  		//通过"样式名"定位<div>
	  		//alert( $(".oneClass").html() );
	  		
	  		//js错误处理和jquery错误处理
	  		//alert( document.getElementById("usernameTD").value );
	  		alert( $("#usernameID").val() );
  		</script>
	</body> 

6、jQuery中常用方法
目的:通过方法,能操作web页面(HTML/JSP)中的任何标签
① val():获取标签的value属性值,前提是该标签有value属性
② html():获取标签之间的内容,不能用运于xml文件
③ text():获取标签之间的内容,可以用运于html/jsp和xml文件【提倡】
④ css():加key-value形成的css样式
⑤ addClass():加已经定义好的一个css样式
⑥ size():获取jQuery对象/数组中元素的个数【提倡】
⑦ length:获取jQuery对象/数组中元素的个数
注意:在写jQuery代码时,不光可以使用jQuery的API,还能使用传统JS的API

7、jQuery九类选择器及应用【参见jQueryAPI.chm手册】
目的:通过选择器,能定位web页面(HTML/JSP/XML)中的任何标签
① 基本选择器

<script type="text/javascript">
   	//1)查找ID为"div1ID"的元素个数
   	//alert( $("#div1ID").size() );
   	
  	//2)查找DIV元素的个数
  	//alert( $("div").length );
  	
  	//3)查找所有样式是"myClass"的元素的个数
  	//alert( $(".myClass").size() );
  	
  	//4)查找所有DIV,SPAN,P元素的个数
  	//alert( $("DIV,span,p").size() );
  	
  	//5)查找所有ID为div1ID,CLASS为myClass,P元素的个数
  	alert( $("#div1ID,.myClass,p").size() );
  	</script>

② 层次选择器

<script type="text/javascript">
	//1)找到表单form里所有的input元素的个数
	//alert( $("form input").size() );
	
  	//2)找到表单form里所有的子级input元素个数
  	//alert( $("form>input").size() );
  	
  	//3)找到表单form同级第一个input元素的value属性值
  	//alert( $("form+input").val() );
  	
  	//4)找到所有与表单form同级的input元素个数
  	alert( $("form~input").size() );
	</script>

③ 增强基本选择器

<script type="text/javascript">
		//1)查找UL中第一个LI元素的内容
			//html()要用于html/jsp,不能用在xml
			//text()既能用于html/jsp,且能用于xml
			//alert( $("ul li:first").text() );
		
	  	//2)查找UL中最后个元素的内容
	  	    //alert( $("ul li:last").text() );
	  	
	  	//4)查找表格的索引号为1、3、5...奇数行个数,索引号从0开始
	  		//alert( $("table tr:odd").size() );
	  	
	  	//5)查找表格的索引号为2、4、6...偶数行个数,索引号从0开始
	  		//alert( $("table tr:even").size() );
	  	
	  	//6)查找表格中第二行的内容,从索引号0开始,这是一种祖先 后代 的变化形式
	  		//html():强调的是标签中的内容,即便标签中的子标签,也会显示出来
	  		//text():强调的是标签中的文本内容,即便标签中的子标签,也只会显示出文本内容,不会显示子标签
	  		//alert( $("table tr:eq(1)").text() );
	  	
	  	//7)查找表格中第二第三行的个数,即索引值是1和2,也就是比0大
	  		//alert( $("table tr:gt(0)").size() );
	  	
	  	//8)查找表格中第一第二行的个数,即索引值是0和1,也就是比2小
	  		//alert( $("table tr:lt(3)").size() );
	  	
	  	//9)给页面内所有标题<h1><h2><h3>加上红色背景色,且文字加蓝色
	  		//$(":header").css("background-color","red").css("color","#ffff33");
	  	
	  	//10)查找所有[未]选中的input为checkbox的元素个数
			alert( $(":checkbox:not(:checked)").size() );	
	</script>

④ 内容选择器

<script type="text/javascript">
		//1)查找所有包含文本"John"的div元素的个数
			//alert( $("div:contains('John')").size() );
		
	  	//2)查找所有p元素为空的元素个数
	  		//alert( $("p:empty").size() );
	  	
	  	//3)给所有包含p元素的div元素添加一个myClass样式
	  		//$("div:has(p)").addClass("myClass");
	  	
	  	//4)查找所有含有子元素或者文本的p元素个数,即p为父元素
	  		alert( $("p:parent").size() );	
	</script>

⑤ 可见性选择器

<script type="text/javascript">
		//1)查找隐藏的tr元素的个数
		//alert( $("table tr:hidden").size() );
		
  		//2)查找所有可见的tr元素的个数
		//alert( $("table tr:NOT(:hidden)").size() );
		alert( $("table tr:visible").size() );//提倡
	</script>

⑥ 属性选择器

<script type="text/javascript">
		//1)查找所有含有id属性的div元素个数
		//alert( $('div[id]').size() );
			
	 	//2)查找所有name属性是newsletter的input元素,并将其选中
		//$("input[name='newsletter']").attr("checked","checked");
	 	
	  	//3)查找所有name属性不是newsletter的input元素,并将其选中
		//$("input[name!='newsletter']").attr("checked","true");

	  	//4)查找所有name属性以'news'开头的input元素,并将其选中
		//$("input[name^='news']").attr("checked","checked");
			  	
	  	//5)查找所有name属性以'letter'结尾的input元素,并将其选中
	  	//$("input[name$='letter']").attr("checked","checked");
	  	
	  	//6)查找所有name属性包含'news'的input元素,并将其选中
		//$("input[name*='news']").attr("checked","checked");
	  	
	  	//7)找到所有含有id属性,并且它的name属性是以"letter"结尾的input元素,并将其选中
	  	$("input[id][name$='letter']").attr("checked","true");	
	</script>

⑦ 子元素选择器

<script type="text/javascript">
		/*用JS语法创建一个一维数组,存入string类型的姓名,再迭代
		var nameArray = new Array("哈哈","呵呵","嘻嘻");
		for(var i=0;i<nameArray.length;i++){
			document.write(nameArray[i]+"<br/>");
		}*/
		
		/*用JSON语法创建一个一维数组,存入string类型的姓名,再迭代
		var nameArray = ["哈哈","呵呵","嘻嘻","都都"];//js对象
		var $nameArray = $(nameArray);//jquery对象
		$nameArray.each(function(){
			this表示数组中每一个元素,this属性js对象,this代表string类型
			alert(this);
		});*/	
		
		//用JSON语法创建一个一维数组,存入object类型的姓名和薪水,再迭代
		var nameArray = [
			{
				name : "哈哈",
				sal : 6000
			},
			{	
				name : "嘿嘿",
				sal : 7000
			},
			{
				name : "笨笨",
				sal : 8000
			}
		];
		var $nameArray = $(nameArray);
		$nameArray.each(function(){
			//this代表object类型
			alert(this.name + ":"+this.sal);
		});
	</script>
<script type="text/javascript">
		/*1)迭代[each]每个ul中第1个li元素中的内容,索引从1开始
		$("ul li:first-child").each(function(){
			alert( $(this).text() );
		});
		*/
			
	 	/*2)迭代每个ul中最后1个li元素中的内容,索引从1开始
		$("ul li:last-child").each(function(){
			alert( $(this).text() );
		});
		*/
	 	
		/*3)迭代每个ul中第2个li元素中的内容,索引从1开始
		$("ul li:nth-child(2)").each(function(){
			alert( $(this).text() );
		});*/
	
	 	//4)在ul中查找是唯一子元素的li元素的内容
	 	$("ul li:only-child").each(function(){
	 		alert( $(this).text() );
	 	});		
</script>

⑧ 表单选择器

<script type="text/javascript">
		//1)查找所有input元素的个数
		//alert( $("input").size() );//10,找input标签
		//alert( $(":input").size() );//13,找input标签和select/textarea/button
			
	  	//2)查找所有文本框的个数
	  	//alert( $(":text").size() );
	  	
	  	//3)查找所有密码框的个数
	  	//alert( $(":password").size() );
	  	
	  	//4)查找所有单选按钮的个数
	  	//alert( $(":radio").size() );
	  	
	  	//5)查找所有复选框的个数
	  	//alert( $(":checkbox").size() );
	  	
	  	//6)查找所有提交按钮的个数
	  	//alert( $(":submit").size() );
	  	
	  	//7)匹配所有图像域的个数
	  	//alert( $(":images").size() );
	  	
	  	//8)查找所有重置按钮的个数
	  	//alert( $(":reset").size() );
	  	
	  	//9)查找所有普通按钮的个数
	  	//alert( $(":button").size() );
	  	
	 	//10)查找所有文件域的个数
	 	//alert( $(":file").size() );
	 	
	 	//11)查找所有input元素为隐藏域的个数
	 	//alert( $(":input:hidden").size() );
	</script>

⑨ 表单对象属性选择器

<script type="text/javascript">
		//1)查找所有可用的input元素的个数
		//alert( $("input:enabled").size() );
		
	 	//2)查找所有不可用的input元素的个数
		//alert( $("input:disabled").size() );
	 	
	 	//3)查找所有选中的复选框元素的个数
		//alert( $(":checkbox:checked").size() );
		 	
	 	//4)查找所有未选中的复选框元素的个数
		//alert( $(":checkbox:NOT(:checked)").size() );
	 	
	 	//5)查找所有选中的选项元素的个数
	 	//alert( $("select option:selected").size() );
	 	alert( $("#provinceID option:NOT(:selected)").size() );
	</script>

注意:项目中,通常是多种选择器一起使用

8、jQuery常用Method-API
目的:对web页面(HTML/JSP/XML)中的任何标签,属性,内容进行增删改查
① DOM简述与分类
◇ DOM是一种W3C官方标准规则,可访问任何标签语言的页面(HTML/JSP/XML)
◇ DOM是跨平台(window/linux/unix),跨语言(javascript/java),
跨浏览器(ie/firefox/Chrome)的标准规则
◇ 我们只需要按照DOM标准规则,针对主流浏览器(ie/firefox/Chrome)编程
◇ JS/jQuery按照DOM的标准规则,既可以操作HTML/JSP,也能操作CSS
◇ DOM标准规则不是JS的专属,其它语言,也能适用,例如:VBScript,Java语言等
② DOM标准规则下的jQuery常用API,注意:以下方法均由jQuery对象调用

方法解释
each()是jQuery中专用于迭代数组的方法,参数为一个处理函数,this表示当前需要迭代的js对象
append()追加到父元素之后
prepend()追加到父元素之前
after()追加到兄弟元素之后
before()追加到兄弟元素之前
attr(name)获取属性值
attr(name,value)给符合条件的标签添加key-value属性对
$(“
HTML代码
”)
创建元素,属性,文本
remove()删除自已及其后代节点
val()获取value属性的值
val("")设置value属性值为""空串,相当于清空
text()获取HTML或XML标签之间的值
text("")设置HTML或XML标签之间的值为""空串
clone()只复制样式,不复制行为
clone(true)既复制样式,又复制行为
replaceWith()替代原来的节点
removeAttr()删除已存在的属性
addClass()增加已存在的样式
removeClass()删除已存在的样式
hasClass()判断标签是否有指定的样式,true表示有样式,false表示无样式
toggleClass()如果标签有样式就删除,否则增加样式
offset()获取对象的left和top坐标
offset({top:100,left:200})将对象直接定位到指定的left和top坐标
width()获取对象的宽
width(300)设置对象的宽
height()获取对象的高
height(500)设置对象的高
children()只查询子节点,不含后代节点
next()下一下兄弟节点
prev()上一下兄弟节点
siblings()上下兄弟节点
show()显示对象
hide()隐藏对象
fadeIn()淡入显示对象
fadeOut()淡出隐藏对象
slideUp()向上滑动
slideDown()向下滑动
slideToggle()上下切换滑动,速度快点
	<script type="text/javascript">
		//DIV标签插入到UL标签之后(父子关系)
		//$("ul").append( $("div") );	
		//DIV标签插入到UL标签之前(父子关系)
		$("ul").prepend( $("div") );
		//DIV标签插入到UL标签之后(兄弟关系)
		//$("ul").after( $("div") ); 
		//DIV标签插入到UL标签之前(兄弟关系)
		$("ul").before( $("div") ); 
	</script>
<script type="text/javascript">
		//取得form里第一个input元素的type属性
		//alert( $("form input:first").attr("type") );
		//设置form里最后个input元素的为只读文本框
		//$("form input:last").attr("readonly","readonly")
		//$(":password").attr("readonly","readonly")
	</script>
<script type="text/javascript">
  		//创建div元素,添加"哈哈"文本,ID属性,并添加到文档中
  		//<body><div id="2015">哈哈</div></body>
  		/*js方式
  		var divElement = document.createElement("div");
  		divElement.innerHTML = "哈哈哈";
  		divElement.setAttribute("id","2015");
  		divElement.id = "2015";
		document.body.appendChild(divElement);*/		
  	
  		//jquery方式
  		var $div = $("<div id='2015'>哈哈哈哈哈</div>");
  		//$("body").append( $div );	
  		$(document.body).append( $div );	
  	</script>
<script type="text/javascript">
  		//删除ID为secondID的LI元素
		//$("#secondID").remove();
  		//删除所有LI元素
  		//$("#a li").remove();	
  		//删除UL元素
  		$("#b").remove();
  	</script>	
<script type="text/javascript">
		//取得<div>中的内容
		//alert( $("div").text() );
		//取得<option>的值和描述
		var $option = $("#city option");
		var value = $option.val();
		var html = $option.text();
		alert(value + ":" + html);
	</script>
<script type="text/javascript">
		//复制原input元素,添加到原input元素后,与其同级
		var $old = $(":button");
		var $new = $old.clone();
		$new.val("新按钮");
		$old.after( $new );
		
		//为原input元素动态添加单击事件,且复制原input元素,
		//var $old = $(":button");
		//$old.click(function(){
		//	alert("动态事件");
		//});
		
        //添加到原input元素后,与其同级,且和原按钮有一样的行为
        //var $new = $old.clone(true);
        //$new.val("新按钮");
		//$old.after( $new );
	</script>
<script type="text/javascript">
		//双击<div>中的文本,用文本框替换文本
		$("div").dblclick( function(){
			var $text = $("<input type='text' style='width:165px;height:23px'/>");
			//文本框替代div标签
			$(this).replaceWith( $text );
		} );
</script>
<script type="text/javascript">
		//为<table>元素添加属性border/align/width
		var $table = $("table").attr("border","2").attr("align","right").attr("width","60%")
		//将<table>元素的align属性删除
		$table.removeAttr("align");
	</script>
<script type="text/javascript">
		//为无样式的DIV添加样式
		//$("div:first").addClass("myClass");
		
		//为有样式的DIV删除样式
		//$("div:last").removeClass("myClass");
		
		//切换样式,即有样式的变成无样式,无样式的变成有样式
		//$("div").toggleClass("myClass");
		
		//最后一个DIV是否有样式
		var flag = $("div:last").hasClass("myClass");
		alert(flag?"有样式":"无样式");
	</script>
<script type="text/javascript">
		//获取图片的坐标
		//var offset = $("img").offset();
		//var x = offset.left;
		//var y = offset.top;
		//alert(x+":"+y);
		
		//设置图片的坐标
		//$("img").offset({
		//	top:100,
		//	left:200
		//});
		
		//获取图片的宽高
		//var w = $("img").width();
		//var h = $("img").height();
		//alert(w+":"+h);
		
		//设置图片的宽高
		$("img").width(500);
		$("img").height(600);
	</script>
<script type="text/javascript">
		//取得div元素的直接子元素内容,不含后代元素
		//var $span = $("div").children();
		//var content = $span.html();//包含子标签
		//var content = $span.text();//不包含子标签
		//alert(content);
		
		//取得div元素的下一个同级的兄弟元素内容	
		//var $p = $("div").next();
		//alert( $p.text() );
		
		//取得div元素的上一个同级的兄弟元素内容
		//alert( $("div").prev().text() );
		
		//依次取得div元素的上下一个同级的所有兄弟元素的内容
		var $all = $("div").siblings("p");		
		$all.each(function(){
			alert( $(this).html() );
		});
	</script>
<script type="text/javascript">
		//图片隐蔽
		$("img").hide(5000);
		//休息3秒
		window.setTimeout(function(){
			//图片显示
			$("img").show(5000);
		},3000);
       
       //淡入显示图片
		$("img").fadeIn(3000);
		//淡出隐蔽图片
		$("img").fadeOut(3000);
	</script>
<script type="text/javascript">
		//向上下滑动
		$(":button").click(function(){
			//div标标上下移动
			$("div").slideToggle(100);
		});
	</script>	

面试题:查询指定的节点和多重each()迭【使用jquery弹出奇数的tr标签下的td里的值】)

<script type="text/javascript">
  	  	function myclick(){
	 		//使用jquery弹出奇数的tr标签下的td里的值,即A1,A2,A3,C1,C2,C3
	 		var $tr = $("table tr:NOT(:last):even");
	 		//在每个tr标签中查询td标签
	 		$tr.each(function(){
	 			//在tr标签中查询所有的td标签
	 			var $td = $(this).find("td");
	 			//迭代
	 			$td.each(function(){
	 				var content = $(this).text();
	 				alert(content);
	 			});
	 		});
	 	}
	 	
	 	//写出另一种方式,比第一种更加easy
	 	function myclick(){
		 	var $td = $("table tr:NOT(:last):even td");
		 	$td.each(function(){
		 		alert($(this).html());
		 	});
	 	}
  	 </script>

9、jQuery常用Event-API
目的:对web页面(HTML/JSP)进行事件触发,完成特殊效果的处理

方法解释
window.onload在浏览器加载web页面时触发,可以写多次onload事件,但后者覆盖前者
ready在浏览器加载web页面时触发,可以写多次ready事件,不会后者覆盖前者,依次从上向下执行,我们常用$(函数)简化
ready和onload同时存在时,二者都会触发执行,ready快于onload
change当内容改变时触发
focus焦点获取
select选中所有的文本值
keyup/keydown/keypress演示在IE和Firefox中获取event对象的不同
mousemove在指定区域中不断移动触发
mouseover鼠标移入时触发
mouseout鼠标移出时触发
submit在提交表单时触发,true表示提交到后台,false表示不提交到后台
click单击触发
dblclick双击触发
blur焦点失去
<script type="text/javascript">
		//定义a()和b()二个方法
		function a(){
			alert("JS方式");
		}
		function b(){
			alert("JQUERY方式");
		}
		/*使用JS方式加载a()和b()二个方法
		window.onload = function(){
			a();
		}
		window.onload = function(){
			b();
		}
		*/

		/*使用jQuery方式加载a()和b()二个方法
		$(document).ready(function(){
			a();
		});	
		$(document).ready(function(){
			b();
		});	
		*/
	
		/*使用jQuery最简方式加载a()和b()二个方法
		$(function(){
			a();
		});
		$(function(){
			b();
		});
		*/
		
		//将js方式的onload与jquery方式的ready对比,看哪个执行快(jquery方式快)
		window.onload = function(){
			alert("传统");
		}
		$(function(){
			alert("现代");
		});
	</script>	
<script type="text/javascript">
		//当<select>标签触发onchange事件,显示选中<option>的value和innerHTML属性的值
		$("#city").change( function(){ 
			var $option = $("#city option:selected");
			var value = $option.val();
			var text = $option.text();
			alert(value+":"+text);
		} );
</script>
<script type="text/javascript">
		//加载页面时获取光标并选中所有文字
		$(function(){
			//光标定位文本框
			$(":text").focus();
			//选中文本框的所有文本
			$(":text").select();
		});
</script>
<script type="text/javascript">
		//当按键弹起时,显示所按键的unicode码
		$(function(){
			//IE浏览器会自动创建event这个事件对象,那么程序员可以根据需要来使用该event对象
			$(document).keyup(function(){
				//获取按钮的unicode编码
				var code = event.keyCode; 
				alert(code);
			});
		});
</script>
<script type="text/javascript">
		//显示鼠标移动时的X和Y座标
		$(function(){
			$(document).mousemove(function(){
				var x = event.clientX;
				var y = event.clientY;
				$("#xID").val(x);
				$("#yID").val(y);
			});		
		});
</script>
<script type="text/javascript">
		//鼠标移到某行上,某行背景变色
		$("table tr").mouseover(function(){
			$(this).css("background-color","inactivecaption");
		});	
		
		//鼠标移出某行,某行还原
		$("table tr").mouseout(function(){
			$(this).css("background-color","white");
		});
		
		//鼠标移到某图片上,为图片加边框
		$("img").mouseover(function(){
			$(this).css("border-color","red");
		});
		
		//鼠标移出图片,图片还原
		$("img").mouseout(function(){
			$(this).css("border-color","white");
		});
</script>
<script type="text/javascript">
		//浏览器加载web页面时触发
		$(function(){
			//将光标定位于文本框中
			$(":text").focus();
		});		
</script>

<script type="text/javascript">
		//检测是否为中文,true表示是中文,false表示非中文
		function isChinese(str){
			if(/^[\u3220-\uFA29]+$/.test(str)){
				return true;
			}else{
				return false;
			}
		}
</script>

<script type="text/javascript">
		//当表单提交前检测
		$("form").submit(function(){
			var flag = false;
			//获取文本框的中内容
			var name = $(":text").val();
			//去二边的空格
			name = $.trim(name);
			//如果没有填内容
			if(name.length == 0){
				alert("用户名必填");
				//将光标定位于文本框中
				$(":text").focus();
				//清空文本框中的内容
				$(":text").val("");
			}else{
				//调用方法
				flag = isChinese(name);
				//如果不是中文
				if(!flag){
					alert("用户名必须填中文");
					//将光标定位于文本框中
					$(":text").focus();
					//清空文本框中的内容
					$(":text").val("");
				}
			}
			return flag;
		});
</script>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值