亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery自帶的一些常用方法總結

2019-11-20 14:11:57
字體:
來源:轉載
供稿:網友

本身方法($.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);
  }
);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品1区2区在线观看| 国产999精品久久久| 亚洲精品白浆高清久久久久久| 日本久久91av| 97精品欧美一区二区三区| 午夜精品久久久久久久男人的天堂| 91国内免费在线视频| 亚洲精品美女免费| 疯狂做受xxxx欧美肥白少妇| 欧美疯狂性受xxxxx另类| 亚洲性av在线| 91中文在线视频| 精品调教chinesegay| 久久久中精品2020中文| www.亚洲一区| 51色欧美片视频在线观看| 日韩在线中文字幕| 国产欧美婷婷中文| 欧美乱人伦中文字幕在线| 欧美国产精品va在线观看| 亚洲人午夜精品| 日韩欧美国产激情| 一区二区三区四区视频| 91精品视频大全| 91精品国产综合久久久久久蜜臀| 国产精品一区二区久久久久| 日韩不卡在线观看| 国产mv免费观看入口亚洲| 青青草成人在线| 亚洲精品动漫久久久久| 97精品国产97久久久久久春色| 久久综合五月天| 久久久久久久国产精品| 久久精品国产99国产精品澳门| 中文字幕亚洲欧美一区二区三区| 久久久999精品| 久久福利网址导航| 亚洲深夜福利网站| 亚洲精品天天看| 国产精品成人在线| 亚洲国产欧美在线成人app| 久久国产精品99国产精| 日韩中文视频免费在线观看| 久热精品视频在线观看一区| 欧美成人激情视频| 97欧美精品一区二区三区| 在线免费观看羞羞视频一区二区| 久久精品影视伊人网| 色综合久综合久久综合久鬼88| 国产精品入口尤物| 国产性色av一区二区| 亚洲成人精品在线| 国产一区二区三区在线观看视频| 亚洲视频日韩精品| 日韩精品免费电影| 日韩成人在线播放| 91色琪琪电影亚洲精品久久| 欧美日韩亚洲精品一区二区三区| 91禁外国网站| 欧美黑人视频一区| 国产精品狼人色视频一区| 欧美剧在线观看| 不卡av在线播放| 亚洲精品日韩久久久| 精品国产老师黑色丝袜高跟鞋| 日韩中文字幕在线| 国产+人+亚洲| 亚洲性视频网站| 疯狂做受xxxx高潮欧美日本| 91亚洲精华国产精华| 91久久夜色精品国产网站| 91av在线视频观看| 欧日韩不卡在线视频| 亚洲国产成人91精品| 国产精品999| 日本伊人精品一区二区三区介绍| 亚洲第一国产精品| 欧美成人精品激情在线观看| 亚洲综合中文字幕在线| 久久久久99精品久久久久| 亚洲电影在线观看| 国产精品视频一区国模私拍| 色99之美女主播在线视频| 668精品在线视频| 久久久免费观看| 上原亚衣av一区二区三区| 97在线视频免费播放| 亚洲一区二区三区视频播放| 日韩亚洲欧美中文高清在线| 中文字幕欧美视频在线| 亚洲一区二区三区视频| 国模极品一区二区三区| 91免费在线视频网站| 色吧影院999| 国产精品久久久久久久久久东京| 欧美日韩亚洲一区二| 国产经典一区二区| 久久国产一区二区三区| 亚洲激情第一页| 亚洲国产精品一区二区久| 91产国在线观看动作片喷水| 在线观看精品自拍私拍| 成人免费观看49www在线观看| 日韩欧美在线网址| 精品视频在线导航| 国产欧美日韩丝袜精品一区| 91理论片午午论夜理片久久| 欧美激情综合色综合啪啪五月| 日韩精品在线视频美女| 日韩欧美在线播放| 国产成人精彩在线视频九色| 精品久久久久久| 精品亚洲一区二区三区在线观看| 亚洲人成电影在线观看天堂色| 中文字幕不卡在线视频极品| 欧美成人免费视频| 国产欧美日韩亚洲精品| 国产精品视频色| 欧美性猛交xxxx乱大交| 中文字幕精品视频| 国产美女主播一区| 欧美亚洲国产另类| 久久免费少妇高潮久久精品99| 少妇高潮久久77777| 亚洲欧美日韩国产成人| 狠狠躁夜夜躁人人爽超碰91| 久久久精品2019中文字幕神马| 亚洲人成网站999久久久综合| 久久成人精品一区二区三区| 国产一区二区视频在线观看| 91香蕉嫩草影院入口| 久久精品国产亚洲7777| 色777狠狠综合秋免鲁丝| 4k岛国日韩精品**专区| 成人福利视频在线观看| 日韩久久免费视频| 欧美日韩国产中字| 91在线免费观看网站| 午夜剧场成人观在线视频免费观看| 国产97在线|日韩| 国产专区精品视频| 亚洲天堂影视av| 国产99久久精品一区二区 夜夜躁日日躁| 久久亚洲精品成人| 精品久久久国产| 91国内揄拍国内精品对白| 欧美激情精品久久久久久久变态| 日韩av电影在线免费播放| 久久久精品2019中文字幕神马| 国产亚洲一级高清| 福利精品视频在线| 亚洲乱码av中文一区二区| 亚洲日韩欧美视频一区| 日韩在线播放av| 精品欧美激情精品一区| 亚洲人成电影网站色xx| 欧美一级淫片丝袜脚交| 精品久久国产精品| 中文日韩在线观看| 久久免费视频在线观看| 午夜精品视频在线| 国产精品高潮呻吟久久av无限| 91欧美精品午夜性色福利在线| 国产亚洲欧美另类中文|