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 相关文章推荐
jquery.validate的使用说明介绍
Nov 12 Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
JS 实现Base64编码与解码实例详解
Nov 07 Javascript
JS中的作用域链
Mar 01 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
在vue项目中正确使用iconfont的方法
Sep 28 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
Apr 11 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
May 06 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
Jul 24 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 Javascript
vue实现input输入模糊查询的三种方式
Aug 14 Vue.js
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数组的一些常见操作汇总
2011/07/17 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
2014/06/22 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
基于python实现名片管理系统
2018/11/30 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
工程部主管岗位职责
2013/11/17 职场文书
中学校庆方案
2014/03/17 职场文书
元旦寄语大全
2014/04/10 职场文书
环保倡议书100字
2014/05/15 职场文书
国家助学金感谢信
2015/01/21 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
护士心得体会范文
2016/01/25 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python