2019/9/24 周二
学习内容: jQuery入门,选择器,设置属性和内容,遍历,事件,动态效果,Ajax,JSON
jQuery是一个快速、简洁的JavaScript框架,它的设计宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
Query的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。
注意:这个引用必须在所有js代码之前
jQuery 选择器基于元素的 id、类、类型、属性、属性值等"查找"(或选择)HTML 元素。 它基于已经存在的CSS选择器,除此之外,它还有一些自定义的选择器。
jQuery 中所有选择器都以美元符号开头:$(),括号里为选择器语法的字符串
因此,为了方便区分jQuery对象和JS对象,我们将所有由选择器获取的jQuery对象也用美元符号来标识,即 var $obj = $(“string”);
语法 和 CSS 选择器语法一致
选择器类型 | 示例 |
---|---|
id选择器 | $("#hhh"); |
元素选择器 | $(“div”); |
类选择器 | $(".myClass"); |
语法 和 CSS 选择器语法一致
选择器类型 | 说明 | 格式 | 示例 |
---|---|---|---|
后代选择器 | 在给定的祖先元素下匹配所有的后代元素 | ancestor descendant | $(“form input”); |
子选择器 | 在给定的父元素下匹配所有的子元素 | parent > child | $(“form > input”); |
相邻兄弟选择器 | 匹配所有紧接在 prev 元素后的 next 元素 | prev + next | $(“label + input”); |
通用兄弟选择器 | 匹配 prev 元素之后的所有 siblings 元素 | prev ~ siblings | $(“form ~ input”); |
具体用法示例详见jQuery官方文档
选择器 | 说明 |
---|---|
:first | 获取匹配的第一个元素 |
:last | 获取匹配的最后一个元素 |
:not(selector) | 去除所有与给定选择器匹配的元素,selector 是用于筛选的选择器 |
:even | 匹配所有索引值为偶数的元素,从 0 开始计数 |
:odd | 匹配所有索引值为奇数的元素,从 0 开始计数 |
:eq(index) | 匹配一个给定索引值的元素,index 从 0 开始计数 |
:gt(index) | 匹配所有大于给定索引值的元素,index 从 0 开始计数 |
:lt(index) | 匹配所有小于给定索引值的元素,index 从 0 开始计数 |
:header | 匹配如 h1, h2, h3之类的标题元素 |
:animated | 匹配所有正在执行动画效果的元素 |
:focus | 匹配当前获取焦点的元素 |
具体用法示例详见jQuery官方文档
选择器 | 说明 |
---|---|
:contains(text) | 匹配包含给定文本的元素,text为一个需要查找的字符串 |
:empty | 匹配所有不包含子元素或者文本的空元素 |
:has(selector) | 匹配含有选择器所匹配的元素的元素,selector 是用于筛选的选择器 |
:parent | 匹配含有子元素或者文本的元素 |
选择器 | 说明 |
---|---|
:hidden | 匹配所有不可见元素,或者type为hidden的元素 |
:visible | 匹配所有的可见元素 |
选择器 | 说明 | 示例 |
---|---|---|
[attribute] | 匹配包含给定属性的元素 | 查找所有含有 id 属性的 div 元素 $(“div[id]”) |
[attribute = value] | 匹配给定的属性是个特定值的元素 | 查找所有 name 属性是 newsletter 的 input 元素 $(“input[name=‘newsletter’]”); |
[attribute != value] | 匹配给定的属性不是某个特定值的元素 | 查找所有 name 属性不是 newsletter 的 input 元素 $(“input[name!=‘newsletter’]”); |
[attribute^=value] | 匹配给定的属性是以某些值开始的元素 | 查找所有 name 以 ‘news’ 开始的 input 元素 $(“input[name^=‘news’]”); |
[attribute$=value] | 匹配给定的属性是以某些值结尾的元素 | 查找所有 name 以 ‘letter’ 结尾的 input 元素 $ (“input[name$=‘letter’]”) |
[attribute*=value] | 匹配给定的属性是以包含某些值的元素 | 查找所有 name 包含 ‘man’ 的 input 元素 $(“input[name*=‘man’]”) |
匹配所有表单控件,格式为$(":控件类型"),控件类型包括:
:input :text :password :radio :checkbox :submit :image :reset :button :file :hidden
此外,还能匹配相应的表单对象属性:
选择器 | 说明 |
---|---|
:enabled | 匹配所有可用元素 |
:disabled | 匹配所有不可用元素 |
:checked | 匹配所有选中的被选中元素(复选框、单选框等,不包括select中的option) |
:selected | 匹配所有选中的option元素 |
设置或返回被选元素的属性值(attribute)。
可以带的参数及用法有:
(1)name,即属性名称,可以返回属性值
例:返回文档中所有图像的src属性值
$("img").attr("src");
(2)properties,作为属性的“名/值对”对象,可以设置多个属性值
例:为所有图像设置src和alt属性
$("img").attr({ src: "test.jpg", alt: "Test Image" });
注意在括号 { }中,多个属性的键值对以逗号隔开,但最后一个不要有逗号
(3)key,value 属性名称和属性值,可以设置属性值
例:为所有图像设置src属性
$("img").attr("src","test.jpg");
(4)key,function(index, attr),可以设置属性值
其中key是属性名称,function为返回属性值的函数,它的第一个参数为当前元素的索引值,第二个参数为原先的属性值。
例:把src属性的值设置为title属性的值
$("img").attr("title", function() { return this.src });
从每一个匹配的元素中删除一个属性,参数极为要删除的属性名
如将文档中图像的src属性删除:
$("img").removeAttr("src");
方法 | 作用 | 对应JS中 |
---|---|---|
html([val/fn]) | 设置或返回所选元素的内容(包括 HTML 标记) | innerHTML |
text([val/fn]) | 设置或返回所选元素的文本内容 | innerText |
val([val/fn/arr]) | 设置或返回表单字段的值 | value |
与JS中类似,jQuery中的这三个方法在无参数时,作用是获取元素的值或内容,有参数val时则为设置,相当于JS中var xx = xx.innerHTML表示获取元素的内容,xx.innerHTML = xx 则是给它赋值。
jQuery中的这三个方法,参数还可以是fn,即回调函数,它有两个参数:被选元素列表中当前元素的下标,以及原始(旧的)值。带fn参数可以设置希望返回的字符串格式,在当中包括获取到的元素的值
另外,val()方法如果带arr参数,即一个数组,可以设置 check/select 的值
each(callback) 是jQuery的对象访问方法(对象访问的更多方法详见官方文档),以每一个匹配的元素作为上下文来执行一个函数。
其中,参数callback,表示一个回调函数,即最后执行的函数(在这里则是指遍历到某元素时所执行的函数)
回调函数接收两个参数(index,element),第一个参数是匹配到的元素在集合中的下标,第二个参数为匹配到的对应元素
var $lis = $("ul>li"); // 获取所有li标签的jQuery对象集合
$lis.each(function(index,ele){ // 遍历该集合
console.log(index)); // 获取下标
console.log(ele); // 获取对应的元素
// 这里得到的是JS对象,因此可以通过innerHTML属性获取它的内容
console.log(ele.innerHTML);
});
注意:遍历获得的元素ele为JS对象,如果需要得到jQuery对象来进行操作,可以使用"$(this)“或” $(element)"
$(this).val=("12345");
$(ele).val=("12345"); // 名字与回调函数中参数的声明一样
在 jQuery 中,大多数 DOM 事件都有一个等效的 jQuery 方法。如JS中的onclick单击事件,在jQuery中对应的就是click事件
但在JS中事件调用函数的写法为"οnclick=function(){要执行的代码};",而在jQuery中的写法为 “click(funtion(){要执行的代码})” ,其中的function也称为回调函数,即该事件发生以后要执行的函数。
如 表单中 第一个input标签 失去焦点(blur) 时 的事件可以这样表示:
$(":input:first").blur(function(){
console.log(this);
})
再如JS表单提交时,在JS中写好check检查函数后,需要在form标签中指出
onsubmit="return check()"
而使用jQuery则可以直接在submit事件的回调函数中写检查的代码并返回,返回false表单就不会提交
$("form").submit( function () {
return false;
} );
在JS中如果要给元素绑定事件,这个元素必须是已经存在的。但有时给某些元素绑定了事件之后,再添加了同样能匹配这个选择器的元素,这个元素就不能触发同样的事件。为了优化这个问题,jQuery 给所有匹配的元素附加一个事件处理函数live,即使这个元素是以后再添加进来的也有效。
一个简单的例子:先给"clickme"类的元素绑定click事件
$('.clickme').live('click', function() {
alert("Live handler called.");
});
再添加一个新的"clickme"类元素
$('body').append('Another target');
点击新增的元素,他依然能够触发事件处理函数。
这里的 append() 是文档处理方法,可以向每个匹配的元素内部追加内容。
官方文档中对事件委派作了很详细的说明,可以仔细去阅读一下。
jQuery有完整的与 DOM 事件对应的事件,如表单、键盘、鼠标等,每一个动作都分得很详细,以及封装了一些新的功能,在这里不一一细说,可参考jQuery官方文档
jQuery提供了一系列二点效果函数,可以实现页面的动态效果,下面这篇博客对jQuery效果做了详细的介绍:
jQuery动画效果大全
jQuery的底层Ajax由"$.ajax()“实现,但一般不直接使用这个方法,而是用由它再次封装的” $.get()“和” $.post()",这两个方法除了请求方式不同外,基本上是一样的。下面就以POST请求为例
(1)url:发送请求地址。
(2)data:待发送 Key/value 参数,其格式与上面第四部分设置被选元素的属性值中properties的格式相同。
(3)callback:发送成功时的回调函数。
(4)type:指定Servlet返回内容的格式,xml, html, script, json, text, _default。
(1)JSON介绍
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式。
简单来说,JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串,它的格式与上面第四部分设置被选元素的属性值中properties的格式相同。
使用JSON前要先去Maven仓库下载一个JSON的jar包,这里推荐阿里的fastjson
(2)JSON使用
在我们的案例中只要用到JSON.toJSONString()把集合转换成JSON对象,它的参数就是需要转换的集合
其他JSON的用法可参考:超详细JSON解析步骤
以之前笔记中的ishopn案例为例,当页面加载完成后,将commoditytype(简称ct)表填充进select标签中
(1)LoadCommoditytypeListServlet中,doGet和doPost方法代码:
// 从数据库中获取所有Commoditytype的集合
List ctList = new CommoditytypeControllerImpl().getCommoditytypeList();
// 获取向前台的输出流
PrintWriter writer = resp.getWriter();
// 把获取到的数据转换成JSON对象,并以字符串形式写入输出流中
writer.write(JSON.toJSONString(ctList));
(2)jQuery代码,$.post用到的参数:url、回调函数、返回内容的格式,因为这个案例是获取数据库中所有数据,不需要发送参数,所以省略data
$.post("/web05/loadCommoditytypeListServlet",function(data){
// 遍历所有数据
for(var i=0;i").attr("value",data[i].ct_id).html(data[i].ct_name));
}
},"json") // type,指定请求返回的内容为JSON对象
在回调函数function()中,可以接收3个参数data、status和xhr,data是发送post请求后服务器返回的数据(在本案例中即ctList),status是服务器状态码,xhr为Ajax对象,其中data和status其实都是xhr的属性,但由于它们比较重要,所以在jQuery中被单独拿出来。
在本案例中,只要拿到data就可以了,所以省略了status和xhr参数