jQuery自带的一些常用方法总结


Posted in Javascript onSeptember 03, 2014

本身方法($.each,$.map,$.contains,$ajax)

常用工具方法

(1)$.trim

$.trim方法用于移除字符串头部和尾部多余的空格。

$.trim('   Hello   ') // Hello

(2)$.contains

$.contains方法返回一个布尔值,表示某个DOM元素(第二个参数)是否为另一个DOM元素(第一个参数)的下级元素。

$.contains(document.documentElement, document.body); 

// true

$.contains(document.body, document.documentElement); 

// false

(3)$.each,$.map

$.each方法用于遍历数组和对象,然后返回原始对象。它接受两个参数,分别是数据集合和回调函数。

$.each([ 52, 97 ], function( index, value ) {

  console.log( index + ": " + value );

});

// 0: 52 

// 1: 97 

var obj = {

  p1: "hello",

  p2: "world"

};

$.each( obj, function( key, value ) {

  console.log( key + ": " + value );

});

// p1: hello

// p2: world

需要注意的,jQuery对象实例也有一个each方法($.fn.each),两者的作用差不多。

$.map方法也是用来遍历数组和对象,但是会返回一个新对象。

var a = ["a", "b", "c", "d", "e"];

a = $.map(a, function (n, i){

  return (n.toUpperCase() + i);

});

// ["A0", "B1", "C2", "D3", "E4"]

(4)$.inArray

$.inArray方法返回一个值在数组中的位置(从0开始)。如果该值不在数组中,则返回-1。

var a = [1,2,3,4];

$.inArray(4,a) // 3

(5)$.extend

$.extend方法用于将多个对象合并进第一个对象。

var o1 = {p1:'a',p2:'b'};

var o2 = {p1:'c'};

$.extend(o1,o2);

o1.p1 // "c"

$.extend的另一种用法是生成一个新对象,用来继承原有对象。这时,它的第一个参数应该是一个空对象。
var o1 = {p1:'a',p2:'b'};

var o2 = {p1:'c'};

var o = $.extend({},o1,o2);

o

// Object {p1: "c", p2: "b"}

默认情况下,extend方法生成的对象是“浅拷贝”,也就是说,如果某个属性是对象或数组,那么只会生成指向这个对象或数组的指针,而不会复制值。如果想要“深拷贝”,可以在extend方法的第一个参数传入布尔值true。
var o1 = {p1:['a','b']};

var o2 = $.extend({},o1);

var o3 = $.extend(true,{},o1);

o1.p1[0]='c';

o2.p1 // ["c", "b"]

o3.p1 // ["a", "b"]

上面代码中,o2是浅拷贝,o3是深拷贝。结果,改变原始数组的属性,o2会跟着一起变,而o3不会。

(6)$.proxy

$.proxy方法类似于ECMAScript 5的bind方法,可以绑定函数的上下文(也就是this对象)和参数,返回一个新函数。

jQuery.proxy()的主要用处是为回调函数绑定上下文对象。

var o = {

    type: "object",

    test: function(event) {

        console.log(this.type);

    }

};

$("#button")

  .on("click", o.test) // 无输出

  .on("click", $.proxy(o.test, o)) // object

上面的代码中,第一个回调函数没有绑定上下文,所以结果为空,没有任何输出;第二个回调函数将上下文绑定为对象o,结果就为object。

这个例子的另一种等价的写法是:

$("#button").on( "click", $.proxy(o, test))

上面代码的$.proxy(o, test)的意思是,将o的方法test与o绑定。

这个例子表明,proxy方法的写法主要有两种。

jQuery.proxy(function, context)

// or

jQuery.proxy(context, name)

第一种写法是为函数(function)指定上下文对象(context),第二种写法是指定上下文对象(context)和它的某个方法名(name)。

再看一个例子。正常情况下,下面代码中的this对象指向发生click事件的DOM对象。

$('#myElement').click(function() {

    $(this).addClass('aNewClass');

});

如果我们想让回调函数延迟运行,使用setTimeout方法,代码就会出错,因为setTimeout使得回调函数在全局环境运行,this将指向全局对象。
$('#myElement').click(function() {

    setTimeout(function() {

        $(this).addClass('aNewClass');

    }, 1000);

});

上面代码中的this,将指向全局对象window,导致出错。

这时,就可以用proxy方法,将this对象绑定到myElement对象。

$('#myElement').click(function() {

    setTimeout($.proxy(function() {

        $(this).addClass('aNewClass'); 

    }, this), 1000);

});

(7)$.data,$.removeData

$.data方法可以用来在DOM节点上储存数据。

// 存入数据

$.data(document.body, "foo", 52 );

// 读取数据

$.data(document.body, "foo");

// 读取所有数据

$.data(document.body);

上面代码在网页元素body上储存了一个键值对,键名为“foo”,键值为52。

$.removeData方法用于移除$.data方法所储存的数据。

$.data(div, "test1", "VALUE-1");

$.removeData(div, "test1");

(8)$.parseHTML,$.parseJSON,$.parseXML

$.parseHTML方法用于将字符串解析为DOM对象。

$.parseJSON方法用于将JSON字符串解析为JavaScript对象,作用与原生的JSON.parse()类似。但是,jQuery没有提供类似JSON.stringify()的方法,即不提供将JavaScript对象转为JSON对象的方法。

$.parseXML方法用于将字符串解析为XML对象。

var html = $.parseHTML("hello, <b>my name is</b> jQuery.");

var obj = $.parseJSON('{"name": "John"}');

var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>";

var xmlDoc = $.parseXML(xml);

(9)$.makeArray

$.makeArray方法将一个类似数组的对象,转化为真正的数组。

var a = $.makeArray(document.getElementsByTagName("div"));

(10)$.merge

$.merge方法用于将一个数组(第二个参数)合并到另一个数组(第一个参数)之中。
var a1 = [0,1,2];

var a2 = [2,3,4];

$.merge(a1, a2);

a1

// [0, 1, 2, 2, 3, 4]

(11)$.now

$.now方法返回当前时间距离1970年1月1日00:00:00 UTC对应的毫秒数,等同于(new Date).getTime()。
$.now()

// 1388212221489

判断数据类型的方法

jQuery提供一系列工具方法,用来判断数据类型,以弥补JavaScript原生的typeof运算符的不足。以下方法对参数进行判断,返回一个布尔值。

jQuery.isArray():是否为数组。
jQuery.isEmptyObject():是否为空对象(不含可枚举的属性)。
jQuery.isFunction():是否为函数。
jQuery.isNumeric():是否为数组。
jQuery.isPlainObject():是否为使用“{}”或“new Object”生成的对象,而不是浏览器原生提供的对象。
jQuery.isWindow():是否为window对象。
jQuery.isXMLDoc():判断一个DOM节点是否处于XML文档之中。
下面是一些例子。

$.isEmptyObject({}) // true

$.isPlainObject(document.location) // false

$.isWindow(window) // true

$.isXMLDoc(document.body) // false

除了上面这些方法以外,还有一个$.type方法,可以返回一个变量的数据类型。它的实质是用Object.prototype.toString方法读取对象内部的[[Class]]属性(参见《标准库》的Object对象一节)。
$.type(/test/) // "regexp"

Ajax操作

$.ajax

jQuery对象上面还定义了Ajax方法($.ajax()),用来处理Ajax操作。调用该方法后,浏览器就会向服务器发出一个HTTP请求。

$.ajax()的用法有多种,最常见的是提供一个对象参数。

$.ajax({

  async: true,

  url: '/url/to/json',

  type: 'GET',

  data : { id : 123 },

  dataType: 'json',

  timeout: 30000,

  success: successCallback,

  error: errorCallback,

  complete: completeCallback

})

function successCallback(json) {

    $('<h1/>').text(json.title).appendTo('body');

}

function errorCallback(xhr, status){

    console.log('出问题了!');

}

function completeCallback(xhr, status){

    console.log('Ajax请求已结束。');

}

上面代码的对象参数有多个属性,含义如下:

async:该项默认为true,如果设为false,则表示发出的是同步请求。
cache: 该项默认为true,如果设为false,则浏览器不缓存返回服务器返回的数据。注意,浏览器本身就不会缓存POST请求返回的数据,所以即使设为false,也只对HEAD和GET请求有效。
url:服务器端网址。这是唯一必需的一个属性,其他属性都可以省略。
type:向服务器发送信息所使用的HTTP动词,默认为GET,其他动词有POST、PUT、DELETE。
dataType:向服务器请求的数据类型,可以设为text、html、script、json、jsonp和xml。
data:向服务器发送的数据,如果使用GET方法,此项将转为查询字符串,附在网址的最后。
success:请求成功时的回调函数,函数参数为服务器传回的数据、状态信息、发出请求的原始对象。
timeout: 等待的最长毫秒数。如果过了这个时间,请求还没有返回,则自动将请求状态改为失败。
error:请求失败时的回调函数,函数参数为发出请求的原始对象以及返回的状态信息。
complete:不管请求成功或失败,都会执行的回调函数,函数参数为发出请求的原始对象以及返回的状态信息。
这些参数之中,url可以独立出来,作为ajax方法的第一个参数。也就是说,上面代码还可以写成下面这样。

$.ajax('/url/to/json',{

  type: 'GET',

  dataType: 'json',

  success: successCallback,

  error: errorCallback

})

简便写法

ajax方法还有一些简便写法。

$.get():发出GET请求。
$.getScript():读取一个JavaScript脚本文件并执行。
$.getJSON():发出GET请求,读取一个JSON文件。
$.post():发出POST请求。
$.fn.load():读取一个html文件,并将其放入当前元素之中。
一般来说,这些简便方法依次接受三个参数:url、数据、成功时的回调函数。

(1)$.get(),$.post()

这两个方法分别对应HTTP的GET方法和POST方法。

$.get('/data/people.html', function(html){

  $('#target').html(html);

});

$.post('/data/save', {name: 'Rebecca'}, function (resp){

  console.log(JSON.parse(resp));

});

get方法接受两个参数,分别为服务器端网址和请求成功后的回调函数。post方法在这两个参数中间,还有一个参数,表示发给服务器的数据。

上面的post方法对应的ajax写法如下。

$.ajax({

    type: 'POST',

    url: '/data/save',

    data: {name: 'Rebecca'},

    dataType: 'json',

    success: function (resp){

      console.log(JSON.parse(resp));

    }

});

(2)$.getJSON()

ajax方法的另一个简便写法是getJSON方法。当服务器端返回JSON格式的数据,可以用这个方法代替$.ajax方法。

$.getJSON('url/to/json', {'a': 1}, function(data){

    console.log(data);

});

上面的代码等同于下面的写法。
$.ajax({

  dataType: "json",

  url: '/url/to/data',

  data: {'a': 1},

  success: function(data){

    console.log(data);

  }

});

(3)$.getScript()

$.getScript方法用于从服务器端加载一个脚本文件。

$.getScript('/static/js/myScript.js', function() {

    functionFromMyScript();

});

上面代码先从服务器加载myScript.js脚本,然后在回调函数中执行该脚本提供的函数。

getScript的回调函数接受三个参数,分别是脚本文件的内容,HTTP响应的状态信息和ajax对象实例。

$.getScript( "ajax/test.js", function (data, textStatus, jqxhr){

  console.log( data ); // test.js的内容

  console.log( textStatus ); // Success

  console.log( jqxhr.status ); // 200

});

getScript是ajax方法的简便写法,因此返回的是一个deferred对象,可以使用deferred接口。
jQuery.getScript("/path/to/myscript.js")

    .done(function() {

        // ...

    })

    .fail(function() {

        // ...

});

(4)$.fn.load()

$.fn.load不是jQuery的工具方法,而是定义在jQuery对象实例上的方法,用于获取服务器端的HTML文件,将其放入当前元素。由于该方法也属于ajax操作,所以放在这里一起讲。

$('#newContent').load('/foo.html');

$.fn.load方法还可以指定一个选择器,将远程文件中匹配选择器的部分,放入当前元素,并指定操作完成时的回调函数。
$('#newContent').load('/foo.html #myDiv h1:first',

    function(html) {

        console.log('内容更新!');

});

上面代码只加载foo.html中匹配“#myDiv h1:first”的部分,加载完成后会运行指定的回调函数。

Ajax事件

jQuery提供以下一些方法,用于指定特定的AJAX事件的回调函数。

.ajaxComplete():ajax请求完成。
.ajaxError():ajax请求出错。
.ajaxSend():ajax请求发出之前。
.ajaxStart():第一个ajax请求开始发出,即没有还未完成ajax请求。
.ajaxStop():所有ajax请求完成之后。
.ajaxSuccess():ajax请求成功之后。
下面是示例。

$('#loading_indicator')

.ajaxStart(function (){$(this).show();})

.ajaxStop(function (){$(this).hide();});

返回值

ajax方法返回的是一个deferred对象,可以用then方法为该对象指定回调函数(详细解释参见《deferred对象》一节)。

$.ajax({

  url: '/data/people.json',

  dataType: 'json'

}).then(function (resp){

  console.log(resp.people);

})

JSONP

由于浏览器存在“同域限制”,ajax方法只能向当前网页所在的域名发出HTTP请求。但是,通过在当前网页中插入script元素(\<script>),可以向不同的域名发出GET请求,这种变通方法叫做JSONP(JSON with Padding)。

ajax方法可以发出JSONP请求,方法是在对象参数中指定dataType为JSONP。

$.ajax({

  url: '/data/search.jsonp',

  data: {q: 'a'},

  dataType: 'jsonp',

  success: function(resp) {

    $('#target').html('Results: ' + resp.results.length);

  }

});)

JSONP的通常做法是,在所要请求的URL后面加在回调函数的名称。ajax方法规定,如果所请求的网址以类似“callback=?”的形式结尾,则自动采用JSONP形式。所以,上面的代码还可以写成下面这样。
$.getJSON('/data/search.jsonp?q=a&callback=?',

  function(resp) {

    $('#target').html('Results: ' + resp.results.length);

  }

);
Javascript 相关文章推荐
js css样式操作代码(批量操作)
Oct 09 Javascript
javascript ajax 仿百度分页函数
Oct 29 Javascript
jQuery 快速结束当前正在执行的动画
Nov 20 Javascript
Javascript基础知识(一)核心基础语法与事件模型
Sep 29 Javascript
在HTML代码中使用JavaScript代码的例子
Oct 16 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
node.js中的fs.ftruncate方法使用说明
Dec 15 Javascript
javascript关于继承的用法汇总
Dec 20 Javascript
JavaScript动态生成二维码图片
Apr 20 Javascript
jQuery原理系列-css选择器的简单实现
Jun 07 Javascript
10种JavaScript最常见的错误(小结)
Jun 21 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 #Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 #Javascript
js实现的类似于asp数据字典的数据类型代码实例
Sep 03 #Javascript
jQuery表格列宽可拖拽改变且兼容firfox
Sep 03 #Javascript
Egret引擎开发指南之视觉编程
Sep 03 #Javascript
Egret引擎开发指南之发布项目
Sep 03 #Javascript
Egret引擎开发指南之运行项目
Sep 03 #Javascript
You might like
一道关于php变量引用的面试题
2010/08/08 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
学习ExtJS Window常用方法
2009/10/07 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
JS生成随机字符串的多种方法
2014/06/10 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中几种操作字符串的方法的介绍
2015/04/09 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
函授本科自我鉴定
2014/02/04 职场文书
函授自我鉴定范文
2014/02/06 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
致短跑运动员加油稿
2015/07/21 职场文书