jQuery及ajax简单运用

1、jQuery入门

1.1、什么是jQuery?

它是一个轻量级的javascript类库

1.2、 jQuery优点

1.2.1 总是面向集合
1.2.2 多行操作集于一行

1.3、程序入口:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<title>Insert title here</title>
<script type="text/javascript">

	/*  $(fn)、$(document).ready(fn)与window.onload的区别?三种写法	项目维护时需要用*/
	
		 $(function() {
			alert("hello jquery");
		}) 
		
		 $(document).ready(function () {
			alert("hello jquery2");
		}) 
		
		 window.onload = function () {
			alert("hello jquery3");
		} 
</script>
</head>
<body>

</body>
</html>

结论: ( f n ) 与 (fn)与 (fn)(document).ready(fn)是等价的,谁在前谁先执行
jsp的dom树结构加载完毕即刻调用方法
window.onload最后执行
jsp的dom树结构加载完,css js等静态资源记载完毕在执行

1.4 jQuery(exp[,context])

exp:选择器

context:上下文,环境/容器,documemt

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
</head>
<body>
	<p>
		<a id="a1" class="c1" href="#">点我1</a>
	</p>
	<p>
		<a id="a2" class="c2" href="#">点我2</a>
	</p>
	<p>
		<a id="a3" class="c3" href="#">点我3</a>
	</p>
	<div>
		<a id="a4" class="c1" href="#">点我4</a>
	</div>
	<div>
		<p>
			<a id="a5" class="c1" href="#">点我5</a>
		</p>
	</div>
	
	<span>点我</span>
</body>
</html>

标签选择器
		 $("a").click(function () {
			alert("被翻牌子");
		}) 

ID选择器
		 $("#a3").click(function () {
			alert("被翻牌子");
		}) 

类选择器
$(".c1").click(function () {
			alert("被翻牌子");
		})

包含选择器:E1 E2
$("p a").click(function () {
			alert("被翻牌子");
		})

组合选择器:E1,E2,E3
$("a,span").click(function () {
			alert("被翻牌子");
		})

自定义选择器::exp
(如果第二个参数没有填,默认查找整个jsp页面)
		$("a","div").click(function () {
			alert("被翻牌子");
		})

1.4.1 jQuery(html,jquery对象转js对象 js对象转jquery对象)

jquery对象转js对象
			//var h1Node = $h1.get(0); 
			var h1Node = $h1[0]; 
			alert(h1Node.value);
			
js对象转jquery对象
			var h2Node = document.getElementById("h2");
			var $h2Node = $(h2Node);
			alert($h2Node.val());

1.5 this指针的作用
1.5.1、事件源(获取当前按钮的按钮值)
1.5.2 当前元素(点击按钮,获取所有a标签的值)

<script type="text/javascript">
	$(function(){
		$(":input").click(function(){
			//this指的是事件源
			alert(this.value);
			$("a").each(function(){
				//this指的是当前元素
				alert($(this).html())
			});
		});
	})	;
</script>

1.6、使用jquery动态给table添加样式

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<title>Insert title here</title>
<style type="text/css">
.fen {
	background: pink;
}

.yello {
	background: #ffff66;
}

.red {
	background: #ff3333;
}

.blue {
	background: #9999ff;
}

.green {
	background: #bbff99;
}
.hui {
	background: #d6d6c2;
}
</style>
<script type="text/javascript">
	$(function () {
		$("table tr:eq(0)").addClass("green");
		$("table tr:gt(0)").addClass("fen");
		
		$("table tr:gt(0)").hover(function(){
			$(this).removeClass().addClass("fen");
		},function(){
			$(this).removeClass().addClass("hui");
		});
		
	});
</script>
</head>
<body>
	<table border="1" width="100%">
		<tr>
			<td>书名</td>
			<td>作者</td>
			<td>点击量</td>
		</tr>
		<tr>
			<td>圣墟</td>
			<td>辰东</td>
			<td>10万</td>
		</tr>
		<tr>
			<td>飞剑问道</td>
			<td>我吃西红柿</td>
			<td>11万</td>
		</tr>
		<tr>
			<td>杀神</td>
			<td>逆苍天</td>
			<td>22万</td>
		</tr>
		<tr>
			<td>龙王传说</td>
			<td>唐家三少</td>
			<td>18万</td>
		</tr>
		<tr>
			<td>斗破苍穹</td>
			<td>天蚕拖豆</td>
			<td>1万</td>
		</tr>
	</table>
</body>
</html>

2、 jQuery插件

1、 插件机制简介
往jquery类库里面去扩展方法,这类方法就是jquery插件
2、 json的三种格式
2.1 对象

2.2 列表/数组

2.3 混合模式
代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript"
	src="${pageContext.request.contextPath }/js/jquery.min.js">
</script>
<title>Insert title here</title>
<script type="text/javascript">
	$(function(){
		//json对象的字符串体现形式
		var jsonObj1 = {
			sid : 's001',
			sname : 'zhangsan'
		};
		console.log(jsonObj1);
		//json数组的字符串体现形式
		var jsonArray1 = [1,2,3,4,5];
		console.log(jsonArray1);
		//json混合模式的字符串体现形式
		var jsons = {id:3,hobby:['a','b']};
		console.log(jsons);
		
		var jsonObj3 = {
				sid : 's002',
				sname : 'lisi',
				hobby:['a','b']
		};
		
		//$.extend是用来扩充jQuery类属性或者方法所用
		var jsonObj2 = {};
		//用后面的对象扩充前一个对象
		//$.extend(jsonObj2,jsonObj1);
		//讲解扩充值覆盖的问题,之前已经扩充的属性值会被后面的对象所覆盖,如果后面对象有新的属性值,会继续扩充
		$.extend(jsonObj2,jsonObj1,jsonObj3);
		console.log(jsonObj2);
		
		$.extend({
			hello:function(){
				alert('天气真好');
			}
		});
		$.hello();
		//$.fn.extend是用来扩充jquery实例的属性或者方法所用
		$.fn.extend({
			sayHello:function(){
				alert("适合打篮球");
			}
			
		});
		$("#yellow").hello();
		alert("yellow");
		
	});
</script>
</head>
<body>
<span id="yellow">yellow</span>
</body>
</html>

3、插件开发:
将css和js封装进文件中,直接调用(格式如下即可,也可省去table包)
如图
在这里插入图片描述
jquery.table.js:

$(function(){
	//设置默认颜色
	var defaults = {
			head : 'fen',
			out : 'yellow',
			over : 'red'
	}
	$.fn.extend({
		//使用return的原因是让该实例方法支持链编程,好比StringBuffer
		bgColor:function(option){
			$.extend(defaults,option);
			//这里的this指的是插件本身,可以看成一个jQuery实例
			return this.each(function() {
				//给默认值(this指当前元素)
		        $("tr:eq(0)",this).addClass(defaults.head);
				$("tr:gt(0)",this).addClass(defaults.out);				
				//添加动态效果
				$("tr:gt(0)",this).hover(function(){
					$(this).removeClass().addClass(defaults.over);
				},function(){
					$(this).removeClass().addClass(defaults.out);
				});
			});
		}
	});
})

jquery.table.css:

.fen {
	background: #ff66ff;
}
.yellow {
	background: #ffff66;
}
.red {
	background: #ff3333;
}
.blue {
	background: #9999ff;
}
.green {
	background: #bbff99;
}
.hui {
	background: #d6d6c2;
}

3、ajax

1、jackson
Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象
和xml文档,同样也可以将json、xml转换成Java对象

核心代码:

 ObjectMapper mapper = new ObjectMapper();
 mapper.writeValueAsString(obj);

 int count = md.getColumnCount();
 map.put(md.getColumnName(i), rs.getObject(i));

2、后台json的三种格式的体现形式
实体类(Student)

package com.zhoutubing.entity;

import java.util.HashSet;
import java.util.Set;
 public class Student {
 	private String sid;
 	private String sname;
 	//教师集合
 	private Set<Teacher> teas = new HashSet<>();
 	
 	public String getSid() {
 		return sid;
 	}
 	public void setSid(String sid) {
 		this.sid = sid;
 	}
 	public String getSname() {
 		return sname;
 	}
 	public void setSname(String sname) {
 		this.sname = sname;
 	}
 	public Set<Teacher> getTeas() {
 		return teas;
 	}
 	public void setTeas(Set<Teacher> teas) {
 		this.teas = teas;
 	}
 	@Override
 	public String toString() {
 		return "Student [sid=" + sid + ", sname=" + sname + ", teas=" + teas + "]";
 	}
 	public Student(String sid, String sname, Set<Teacher> teas) {
 		super();
 		this.sid = sid;
 		this.sname = sname;
 		this.teas = teas;
 	}
 	public Student() {
 		super();
 	}
 	public Student(String sid, String sname) {
 		super();
 		this.sid = sid;
 		this.sname = sname;
 	}
 }

json的三种格式:
1 、对象 {sid:‘s001’,sname:‘zs’}
2 、列表/数组 [1,3,5,7]
3 、混合模式 {id:3,hobby:[‘a’,‘b’,‘c’]}

package com.zhoutubing;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.dengrenli.entity.Student;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
 * 后台json的三种格式的体现形式
 * @author Administrator
 *
 */
public class Demo1 {

	public static void main(String[] args) throws Exception {
//		json对象
		Student s= new Student("s001", "zhangsan");
		ObjectMapper om = new ObjectMapper();
		System.out.println(om.writeValueAsString(s));
//		json数组
		Student s1= new Student("s002", "lisi");
		List<Student> list = new ArrayList<>();
		list.add(s);
		list.add(s1);
		System.out.println(om.writeValueAsString(list));
//		json混合模式
		Map<String, Object> map = new HashMap<>();
		map.put("total", 2);
		map.put("stu", list);
		System.out.println(om.writeValueAsString(map));
	}
}

2 javaBean与map集合转换成json字符串格式是一样的

package com.zhoutubing;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * javaBean与map集合转换成json字符串格式是一样的
 * @author Administrator
 *
 */
public class Demo2 {
public static void main(String[] args) throws JsonProcessingException {

	Map<String, Object> stu1 = new HashMap<>();
	stu1.put("sid", "001");
	stu1.put("sname", "张三");
	ObjectMapper om = new ObjectMapper();
	System.out.println(om.writeValueAsString(stu1));

	Map<String, Object> stu2 = new HashMap<>();
	stu2.put("sid", "002");
	stu2.put("sname", "李四");
	List<Map<String, Object>> ls1 = new ArrayList<>();
	ls1.add(stu1);
	ls1.add(stu2);
	System.out.println(om.writeValueAsString(ls1));	
}
}

3.json死循环

package com.zhoutubing;
import java.util.HashSet;
import java.util.Set;

import com.zhoutubing.entity.Student;
import com.zhoutubing.entity.Teacher;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * json死循环问题
 * 1.由双向绑定改成单向绑定,也就是说将彼此之间的关系交于一方维护
 * 2.在teacher实体类那边加 @JsonIgnore:将彼此循环调用的属性忽略,不参与对象转成json格式
 * @author Administrator
 *
 */
public class Demo3 {
	public static void main(String[] args) throws JsonProcessingException {
		
		Student s1 = new Student("s001", "张三");
		Student s2 = new Student("s002", "李四");
		Teacher t1 = new Teacher("t001", "小李", null);
		Teacher t2 = new Teacher("t002", "飞刀", null);
		Set<Teacher> teas = new HashSet<>();
		teas.add(t1);
		teas.add(t2);
		s1.setTeas(teas);// StackOverflowError双向绑定
		Set<Student> ss = new HashSet<>();
		ss.add(s1);
		ss.add(s2);
		t1.setS(ss);
		ObjectMapper om = new ObjectMapper();
		System.out.println(om.writeValueAsString(s1));
	}
}

解决方法:
1、 忽略双向关联的一个方向即可
2、 @JsonIgnore/程序控制(将彼此循环调用的属性忽略,不参与对象转成json格式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值