1. 程式人生 > >Java進階學習第二十六天(JSON基礎、jQuery基礎)

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物件【重點】 語法:(js)&gt;jQuery(js物件)----&gt;jQuery物件 例如:(divElement)---->divdiv 例如:(this)---->thisjQueryjsjsjQueryjs1jQuery[0]2jQuery.get(0)this 注意:jQuery物件將js物件做了封裝,js物件二邊無引號 ④ jQuery物件轉成js物件 語法1:jQuery物件[下標,從0開始] 語法2:jQuery物件.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
  	 </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 焦點失去