jQuery 简单总结

来源:互联网 发布:2017年春运数据 编辑:程序博客网 时间:2024/06/16 19:00

查找

find()查找

如果要从当前节点开始向上查找,使用parent()方法

对于位于同一层级的节点,可以通过next()prev()方法

过滤

filter()方法可以过滤掉不符合选择器条件的节点

map()方法把一个jQuery对象包含的若干DOM节点转化为其他对象

var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskellvar arr = langs.map(function () {    return this.innerHTML;}).get(); // 用get()拿到包含string的Array:['JavaScript', 'Python', 'Swift', 'Scheme', 'Haskell']

text() 和 html

jQuery对象的text()html()方法分别获取节点的文本和原始HTML文本,

css()

$('#test-css li.dy>span').css('background-color', '#ffd351').css('color', 'red');

var div = $('#test-div');div.css('color'); // '#000033', 获取CSS属性div.css('color', '#336699'); // 设置CSS属性div.css('color', ''); // 清除CSS属性

注意,jQuery对象的所有方法都返回一个jQuery对象(可能是新的也可能是自身),这样我们可以进行链式调用,非常方便。

显示和隐藏DOM

考虑到显示和隐藏DOM元素使用非常普遍,jQuery直接提供show()hide()方法

获取DOM信息

// 浏览器可视窗口大小:$(window).width(); // 800$(window).height(); // 600// HTML文档大小:$(document).width(); // 800$(document).height(); // 3500// 某个div的大小:var div = $('#test-div');div.width(); // 600div.height(); // 300div.width(400); // 设置CSS属性 width: 400px,是否生效要看CSS是否有效div.height('200px'); // 设置CSS属性 height: 200px,是否生效要看CSS是否有效

attr()removeAttr()方法用于操作DOM节点的属性:

// <div id="test-div" name="Test" start="1">...</div>var div = $('#test-div');div.attr('data'); // undefined, 属性不存在div.attr('name'); // 'Test'div.attr('name', 'Hello'); // div的name属性变为'Hello'div.removeAttr('name'); // 删除name属性div.attr('name'); // undefined

attr()prop()对于属性checked处理有所不同:

var radio = $('#test-radio');radio.attr('checked'); // 'checked'radio.prop('checked'); // true

prop()返回值更合理一些。不过,用is()方法判断更好:

var radio = $('#test-radio');radio.is(':checked'); // true
类似的属性还有selected,处理时最好用is(':selected')

对于表单元素,jQuery对象统一提供val()方法获取和设置对应的value属性:

添加DOM

要添加新的DOM节点,除了通过jQuery的html()这种暴力方法外,还可以用append()方法

ul.append('<li><span>Haskell</span></li>');
append()把DOM添加到最后,prepend()则把DOM添加到最前。

另外注意,如果要添加的DOM节点已经存在于HTML文档中,它会首先从文档移除,然后再添加,也就是说,用append(),你可以移动一个DOM节点。

也就是说,同级节点可以用after()或者before()方法。

删除节点

要删除DOM节点,拿到jQuery对象后直接调用remove()方法就可以了


动画

show / hide

直接以无参数形式调用show()hide(),会显示和隐藏DOM元素。但是,只要传递一个时间参数进去,就变成了动画

toggle()方法则根据当前状态决定是show()还是hide()

slideUp / slideDown

slideUp()slideDown()则是在垂直方向逐渐展开或收缩的 slideToggle()则根据元素是否可见来决定下一步动作:

fadeIn / fadeOut

fadeIn()fadeOut()的动画效果是淡入淡出,也就是通过不断设置DOM元素的opacity属性来实现,而fadeToggle()则根据元素是否可见来决定下一步动作:

自定义动画

animate(),它可以实现任意动画效果,我们需要传入的参数就是DOM元素最终的CSS状态和时间,jQuery在时间段内不断调整CSS直到达到我们设定的值:


animate()还可以再传入一个函数,当动画结束时,该函数将被调用

串行动画

jQuery的动画效果还可以串行执行,通过delay()方法还可以实现暂停,这样,我们可以实现更复杂的动画效果,而代码却相当简单

// 动画效果:slideDown - 暂停 - 放大 - 暂停 - 缩小div.slideDown(2000)   .delay(1000)   .animate({       width: '256px',       height: '256px'   }, 2000)   .delay(1000)   .animate({       width: '128px',       height: '128px'   }, 2000);}
此外,jQuery也没有实现对background-color的动画效果,用animate()设置background-color也没有效果。这种情况下可以使用CSS3的transition实现动画效果。

AJAX

jQuery在全局对象jQuery(也就是$)绑定了ajax()函数,可以处理AJAX请求。ajax(url, settings)函数需要接收一个URL和一个可选的settings对象,常用的选项如下:

  • async:是否异步执行AJAX请求,默认为true,千万不要指定为false

  • method:发送的Method,缺省为'GET',可指定为'POST''PUT'等;

  • contentType:发送POST请求的格式,默认值为'application/x-www-form-urlencoded; charset=UTF-8',也可以指定为text/plainapplication/json

  • data:发送的数据,可以是字符串、数组或object。如果是GET请求,data将被转换成query附加到URL上,如果是POST请求,根据contentType把data序列化成合适的格式;

  • headers:发送的额外的HTTP头,必须是一个object;

  • dataType:接收的数据格式,可以指定为'html''xml''json''text'等,缺省情况下根据响应的Content-Type猜测。

var jqxhr = $.ajax('/api/categories', {    dataType: 'json'});// 请求已经发送了
jQuery的jqXHR对象类似一个Promise对象,我们可以用链式写法来处理各种回调:

'use strict';function ajaxLog(s) {    var txt = $('#test-response-text');    txt.val(txt.val() + '\n' + s);}$('#test-response-text').val('');

var jqxhr = $.ajax('/api/categories', {
    dataType: 'json'
}).done(function (data) {
    ajaxLog('成功, 收到的数据: ' + JSON.stringify(data));
}).fail(function (xhr, status) {
    ajaxLog('失败: ' + xhr.status + ', 原因: ' + status);
}).always(function () {
    ajaxLog('请求完成: 无论成功或失败都会调用');
});

get

对常用的AJAX操作,jQuery提供了一些辅助方法。由于GET请求最常见,所以jQuery提供了get()方法,可以这么写:

var jqxhr = $.get('/path/to/resource', {    name: 'Bob Lee',    check: 1});

第二个参数如果是object,jQuery自动把它变成query string然后加到URL后面,实际的URL是:

/path/to/resource?name=Bob%20Lee&check=1

这样我们就不用关心如何用URL编码并构造一个query string了。

post

post()get()类似,但是传入的第二个参数默认被序列化为application/x-www-form-urlencoded

var jqxhr = $.post('/path/to/resource', {    name: 'Bob Lee',    check: 1});

实际构造的数据name=Bob%20Lee&check=1作为POST的body被发送。

getJSON

由于JSON用得越来越普遍,所以jQuery也提供了getJSON()方法来快速通过GET获取一个JSON对象:

var jqxhr = $.getJSON('/path/to/resource', {    name: 'Bob Lee',    check: 1}).done(function (data) {    // data已经被解析为JSON对象了});

underscore

map/filter

Arraymap()filter()类似,但是underscore的map()filter()可以作用于Object。当作用于Object时,传入的函数为function (value, key),第一个参数接收value,第二个参数接收key:
当集合的所有元素都满足条件时,_.every()函数返回true,当集合的至少一个元素满足条件时,_.some()函数返回true

'use strict';// 所有元素都大于0?_.every([1, 4, 7, -3, -9], (x) => x > 0); // false// 至少一个元素大于0?_.some([1, 4, 7, -3, -9], (x) => x > 0); // true