jQuery

1 篇文章 0 订阅

                                                     jQuery

一、什么是jQuery

jQuery是一种轻量级的Javascript类库。重量级的有Ext.js,由于使用较为复杂,目前已经很少使用。

jQuery由于其良好的兼容性、易操作性深受开发者的喜爱,目前,几乎绝大部分的Web前段开发都是基于jQuery。

二、jQuery官网及下载地址

官网:https://jquery.com/

下载地址:http://jquery.com/download/

三、jQuery的优点

1.兼容性

兼容所有主流浏览器,如IE6+、Google、FireFox等。

举例:

大家在S2做项目的时候,是不是遇到过自己写的Javascript代码明明在这个浏览器可以运行的好好的,但是换一个浏览器就不行了或者报错了,对吧?而现在使用的jQuery就可以完美解决该问题。

2.面向集合

jQuery以面向集合方式操作DOM元素

3.链式调用

jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。

四、如何使用jQuery(hello world)

1.导入JS类库

<script type="text/javascript" src="js库路径"></script>

2入口模块.

  1. 完整写法:jQuery(document).ready(fn)
  2. 缩写:$(fn)

注:

  1. $(fn)为程序入口;
  2. fn为匿名函数,不指定参数名的函数叫做匿名函数。

案例1

目的:jQueryhelloworld演示,重点强调jq的程序入口写法、什么是匿名函数!!

<script type=”text/javascript”>

//平常的写法

//function aaa(){}

$(function(){

alert(‘hello jQuery’);

});

</script>

 

案例2

目的:jq$(fn)程序入口作用!!

...

<title></title>

<script>

$(“a”).click(function(){

alert(“hello”);

})

</script>

<a href=”#”>点我</a>

...

<a href=”#”>有种点我1</a>

<a href=”#”>有种点我2</a>

<a href=”#”>有种点我3</a>

<div>

    <a href=”#”>有种点我1</a>

</div>

<p>

<div>

        <a href=”#”>有种点我1</a>

</div>

</p>

示例1

不指定jQuery的程序入口,并将js代码放置在title标签与body标签之间,刷新页面点击a标签无任何信息弹出;

示例2

不指定jQuery的程序入口,将js代码放置到JSP页面的最后,刷新页面点击a标签可弹出提示信息;

示例3

指定jQuery的程序入口,将js代码放置到title标签与body标签之间,刷新页面点击a标签可弹出提示信息;

总结:

$(fn)的作用是:当 DOM(文档对象模型) 已经加载,并且页面(包括图像)已经完全呈现时,才会触发 ready 事件。

五、使用Google开发者工具调试JS

Elements

查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈

Console

记录开发者开发过程中的日志信息,且可以作为与JS进行交互的命令行Shell

Sources

断点调试JS

Network

从发起网页页面请求Request后分析HTTP请求后得到的各个请求资源信息(包括状态、资源类型、大小、所用时间等),可以根据这个进行网络性能优化

Timeline

记录并分析在网站的生命周期内所发生的各类事件,以此可以提高网页的运行时间的性能

Profiles

如果你需要Timeline所能提供的更多信息时,可以尝试一下Profiles,比如记录JS CPU执行时间细节、显示JS对象和相关的DOM节点的内存消耗、记录内存的分配细节

Application

记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等

Security

判断当前网页是否安全

Audits

对当前网页进行网络利用情况、网页性能方面的诊断,并给出一些优化建议。比如列出所有没有用到的CSS文件等

六、jQuery的三种工厂方法

jQuery就是一个容器,用来装HTML元素。

三种工厂方法就是三种创建jQuery的方法。

搞清楚什么是实例方法和类方法。

 

模拟jQuery,创建一个jQuery类,构造方法是私有化的,因此通过工厂方法拿到对象。

工厂方法:用来做东西的,jQuery的工厂方法用来做jQuery对象的。

 

1.jQuery(selector[,context])

exp:选择器(类似CSS选择器,元素、类、ID等选择器)

1.1元素选择器(Element)

示例1

//通过元素选择器给页面中的所有a标签绑定click事件

$(“a”).click(function(){

    alert(“1234”);

});

 

1.2类选择器(.Class)

示例2

//通过类选择器给页面中的class=”a1”的标签绑定click事件

$(“.a1”).click(function(){

    alert(“1234”);

});

 

1.3ID选择器(#Id)

示例3

//通过ID选择器给页面中的id=”a1”的标签绑定click事件

$(“#a1”).click(function(){

    alert(“1234”);

});

 

1.4组合选择器(E1,E2)

示例4

//通过组合选择器给页面中的class=”a1”class=”a2”的标签绑定click事件

$(“.a1,.a2”).click(function(){

    alert(“1234”);

});

 

1.5包含选择器(E1 E2)

示例5

//通过包含选择器给页面中p元素下的class=”a3”的标签绑定click事件

$(“p .a3”).click(function(){

    alert(“1234”);

});

 

1.6属性选择器

示例6

//通过属性选择器给页面中input元素name=”btn”的标签绑定click事件

$(“input[name=’btn’]”).click(function(){

    alert(“1234”);

});

 

context:上下文/环境/容器 默认作用域:document

举例:

找一个名叫张三的人,通过名字可以第一时间判断出这是一个中国人,对不对?那么查找这个人的范围是不是在全中国,而这个范围是不是太大了,查找的结果是不是很多?那好,我们在缩短范围。而这是不是在一个容器或者环境下查找一个人啊,同样我们也可以指定范围大小来查找啊?

示例1

//上下文默认:document

//document的容器中给所有a标签绑定click事件

$(“a”,docment).click(function(){

    alert(“1234”);

});

 

//指定容器范围为div,在div容器中给所有a标签绑定click事件

$(“a”,”div”).click(function(){

    alert(“1234”);

});

 

2.jQuery(html)

html:表示一个html的字符串

示例1点击add按钮往select中动态添加option元素

<div>

<select id=”s1”>

<option>---------请选择--------</option>

</select>

<input name=”btn1” type=”button” value=”add” />

</div>

...

$(“input[name=’btn1’]”).click(function(){

//appendTo:将option字符串加入到select标签

$(“<option>value</option>”).appendTo(“#s1”);

//append:往select标签中追加option字符串

$(“#s1”).append(“<option>value2</option>”);

});

3.jQuery(element)

element:表示一个html元素对象;

示例1:点击a标签给自身文本添加字体颜色样式

$('a').click(function(){

    //this表示id=”a3”元素的html元素对象

         $(this).css({'color':'red'});

});

七、this指针

1.this的用法

this:表示当前的上下文对象是一个html DOM对象,可以调用html对象所拥有的属性、方法。

$(this):代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值。

示例1

$(‘a’).click(function(){

//this表示a标签的DOM元素对象

console.log(this);

//$(this)表示a标签的jQuery对象

console.log($(this));

});

2.作用域

示例1this的作用域

...

$(‘input’).click(function(){

//第1次出现的this

var _this=this;

$(‘a’).each(function(){

//第2次出现的this

var id=$(this).attr(“id”);

console.log(id);

})

})

备注:

1次出现的this的作用范围在inputclick事件内;而第2次出现的this的作用域在$(‘a’).each函数内,它们分别代表的意义是不同的。第1次出现的this指的是input DOM元素对象(当前元素),第2次出现的this指的是jQuery对象a标签。

 

示例2each(类似java集合对象遍历方式foreach

$(‘a’).each(function(){

var id=$(this).attr(“id”);

alert(id);

})

举例:

跟着老师喊“我欠你100块钱”,老师喊出来代表老师自己,你们喊出来的是不是代表你们自己啊?同一句话,喊出来的人不同而已;

八、jQuery插件机制介绍

jQuery插件的机制很简单,就是利用jQuery提供的jQuery.fn.extend()和jQuery.extend()方法,扩展jQuery的功能。

其实jQuery插件就是给jQuery添加新的实例方法或类方法,然后将功能封闭在其中。

九、JSON的三种方式

1.对象

{sid:”p001”,sname:”zhangsan”}

2.列表/数组

[1,2,3,4,5]

3.混合模式

{id:’001’:num:[1,3,4,5]}

4.JSON转对象/对象转JSON

var obj={id:’001’:name:’zhangsan’};

//obj对象转JSON

var toJson=JSON.parse(obj);

console.log(toJson);

//JSON对象转obj

var toObj=JSON.stringify(toJson);

console.log(toObj);

十、$.extend和$.fn.extend

1.$.extend

$.extend用于扩展jQuery类本身,也就是用来在jQuery/命名空间上增加新函数,或者叫静态方法,例如jQuery内置的 ajax方法都是用jQuery.ajax()这样调用的,有点像类名.方法名静态方法的调用方式。

1.1$.extend(obj1,obj2,obj3[,...])

含义:将所有的参数项都合并obj1中,并返回obj1,可以扩展无数个;

示例1

var obj1={sid:'001'};

var obj2={sid:'007',sname:'zs'};

var obj3={idcard:'43010101'};

alert(obj1.sid+' '+obj1.sname+' '+obj1.idcard);

//输出结果

result={001+’ ’+undefined+’ ’+undefined};

 

$.extend(obj1,obj2);

alert(obj1.sid+' '+obj1.sname+' '+obj1.idcard);

//输出结果

//result={007+’ ’+zs+’ ’+undefined};

 

$.extend(obj1,obj2,obj3);

alert(obj1.sid+' '+obj1.sname+' '+obj1.idcard);

//输出结果

//result={007+’ ’+zs+’ ’+43010101};

注:JSON对象中的数据格式类似Map集合,当JSON对象中的属性名相同,值将被覆盖

1.2$.extend(obj1)

含义:以obj参数扩展jQuery的类方法和类属性(静态方法和静态属性)

两种表现形式:

  1. $.extend(obj1):obj1为JSON对象,可以添加多个方法或多个属性;
  2. $.method=function(option){...}:一次只能添加一种方法;

示例1扩展jQuery对象本身类方法,新增一个add方法计算a+b的值并返回结果

$(function(){

    var add={add:function(a,b){return a+b;}};

$.extend(add);

var result=$.add(1,6);

console.log(result);

});

注:扩展了jQuery对象的add类方法

2.$.fn.extend

jQuery.fn.extend()方法就是扩展jQuery对象的原型方法。我们知道扩展原型上的方法,就相当于为对象添加“成员方法”,类的“成员方法”要类的对象才能调用,所以使用jQuery.fn.extend(object)扩展的方法,jQuery类的实例可以使用这个“成员函数”,有点像“类的对象名.方法名”的调用方式。

示例1

$(function(){

$.fn.extend({test:function(){alert(1234);}});

$(“a”).test();

});

十一、jQuery插件开发实例

1.命名jquery.xxx.js

2.扩展实例方法

jquery.bgcolor.js:

$.fn.extend({

    //options为JSON对象

    bgcolor:function(options){

       //options JSON属性对象判空

       options=options||{};

      

       //定义默认的属性

       var defaults={

           headClass:'head',

           overClass:'over',

           outClass:'out'

       };

       //扩展jQuery类方法,命名参数写法

       $.extend(defaults,options);

       //使用return,支持链式调用

       return this.each(function(){

           //添加表头样式

           $("tr:eq(0)",this).addClass(defaults.headClass);

           //添加行的悬浮效果

         $("tr:gt(0)",this).addClass(defaults.outClass).hover(function(){

               $(this).removeClass().addClass(defaults.overClass);

           },function(){

              $(this).removeClass().addClass(defaults.outClass);

           });

       });

    }

});

Bgcolor.css:

.head{

    background:red;

}

.over{

    background:blue;

}

.out{

    background:white;

}

3.链式调用

//添加行的悬浮效果

$("tr:gt(0)",this).addClass(defaults.outClass).hover(function(){

    $(this).removeClass().addClass(defaults.overClass);

},function(){

    $(this).removeClass().addClass(defaults.outClass);

});

4.命名参数的写法

//扩展jQuery类方法,命名参数写法

$.extend(defaults,options);

十二、Jackson

1.什么是Jackson

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

2.核心代码

//JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现

ObjectMapper toJson=new ObjectMapper(

3.Jackson使用

3.1JavaBean/Map与JSON互转

注:JavaBeanMap对象转换成JSON的格式:{}

JavaBean/Map对象转换成JSON对象。

User user=new User("zhangsan",20,Date.valueOf("1988-8-8"),"12345@qq.com");

ObjectMapper toJson=new ObjectMapper();

//User实体对象转JSON

String objJson=toJson.writeValueAsString(user);

System.out.println(objJson);

//输出结果

{"name":"zhangsan","age":20,"birthday":"1988-08-08","email":"12345@qq.com"}

 

//Map集合转换成JSON对象

Map<String,User> map=new HashMap<String,User>();

map.put("user", user);

String mapJson=toJson.writeValueAsString(map);

System.out.println(mapJson);

//输出结果

{"user":{"name":"zhangsan","age":20,"birthday":"1988-08-08","email":"12345@qq.com"}}

JSON对象转换成JavaBean/Map对象。

//JSON对象转换成User实体对象

String strUser="{\"name\":\"zhangsan\",\"age\":20,\"birthday\":586969200000,\"email\":\"12345@qq.com\"}";

User us=mapper.readValue(strUser, User.class);

System.out.println(us);

//输出结果

User [name=zhangsan, age=20, birthday=1988-08-08, email=12345@qq.com]

 

//JSON对象转换成Map对象

String strMap="{\"user\":{\"name\":\"zhangsan\",\"age\":20,\"birthday\":\"1988-08-08\",\"email\":\"12345@qq.com\"}}";

Map<String,User> mp=mapper.readValue(strMap,new TypeReference<Map<String,User>>() {});

System.out.println(mp);

//输出结果

{user=User [name=zhangsan, age=20, birthday=1988-08-08, email=12345@qq.com]}

3.2数组/List/Set与JSON互转

注:数组、ListSet对象转换成JSON的格式:[]

将数组/List/Set对象转换成JSON对象。

//List<User>集合对象转换成JSON对象

List<User> lst=new ArrayList<User>();

lst.add(user);

String lstJson=toJson.writeValueAsString(lst);

System.out.println(lstJson);

//输出结果

[{"name":"zhangsan","age":20,"birthday":"1988-08-08","email":"12345@qq.com"}]

JSON对象转换成数组/List/Set对象。

//JSON对象转换成List<User>对象

String strLst="[{\"name\":\"zhangsan\",\"age\":20,\"birthday\":\"1988-08-08\",\"email\":\"12345@qq.com\"}]";

List<User> lstUser=toJson.readValue(strLst, new TypeReference<List<User>>() {});

System.out.println(lstUser);

//输出结果

[User [name=zhangsan, age=20, birthday=1988-08-08, email=12345@qq.com]]

3.3混合模式/嵌套使用

//添加一个用户信息

User user=new User("zhangsan",20,Date.valueOf("1988-8-8"),"12345@qq.com");

//添加一个班级信息,并将用户信息加入到该班级中

Clazz cla=new Clazz(1,"T206",user);

//将班级对象转换成JSON对象

ObjectMapper mapper=new ObjectMapper();

String str=mapper.writeValueAsString(cla);

System.out.println(str);

//输出结果

{"id":1,"cname":"T206","user":{"name":"zhangsan","age":20,"birthday":"1988-08-08","email":"12345@qq.com"}}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值