jQuery入門筆記之(六)工具函數

jopen 8年前發布 | 40K 次閱讀 jQuery Ajax框架

工具函數直接依附于 jQuery 對象,針對 jQuery 對象本身定義的方法,它是全局性的函數。主要提供比如字符串、數組、對象等操作方面的遍歷。

字符串操作

去除字符串左右空格的工具函數: $.trim() 。這個函數我在task0002的部分已經用正則實現了。

如下:

function trim(str) {
    var result = "";
    result = str.replace(/^\s+|\s+$/g, ""); //使用正則進行字符串替換
    return result;
}
//下面是jQuery中的使用方法
var str = "         guowen      ";
alert($.trim(str));//可以看到空格被去除了

數組及對象操作

jQuery 為處理數組和對象提供了一些工具函數,這些函數可以便利的給數組或對象進行遍歷、篩選、搜索等操作。

遍歷

這個我也實現了,其實特別簡單,只不過jQuery與和我實現的方法略微有一點不同,且更強大一點。

var arr = ["二狗", "甲地", "道德", "鯉魚"];
//原生JS實現,只能用來遍歷數組,不能遍歷對象。
function each(arr, fn) {
    for (var i = 0, l = arr.length; i < l; i++) {//遍歷傳參
        fn(arr[i], i);//第一項為值,第二項為索引
    }
}
each(arr,function(value,index) {
    console.log(index+":"+value);//0:二狗1:甲地2:道德3:鯉魚
});

//jQuery中的方法
$.each(arr, function (index,value) {//注意此處更改了參數的位置。index為數組下標,從0開始
    console.log(index+":"+value);//0:二狗1:甲地2:道德3:鯉魚
});
//$.each()還可以用來遍歷對象
//<div id="box"></div>
$.each($.ajax(), function (name, fn) {
    $("#box").html($("#box").html() + name + "." + "<br />");//一堆,就不貼了
})

$.grep() 數據篩選

var arr = [12, 33, 4, 5, 1, 77, 55, 32];
/**
 * 數據篩選函數。
 * @param  {String or Number} element  這里表示數組項,字符串數字都有可能(自行在函數內部進行篩選)
 * @param  {Number} index   表示數組下標,如下面的index<4,就只在前四項進行篩選
 * @return {String or Number}         返回篩選出來的項
 */
console.log($.grep(arr,function  (element,index){
    return element<6&∈dex<4;//會打印出[4, 5]。
}));

$.map()修改數據

//還是上面的數組
var arrMap = $.map(arr,function(element, index) {
    if(element<6 && index<4){
        return element+1;
    }
});
console.log(arrMap);//打印出[5,6]

$.inArray()獲取查找到元素的下標

/**
* 獲取查找到元素的下標
* @param  {String or Number} element  需要查找的字符串或數字
* @param  {Array} arr   待查找的數組
* @return {Number}   返回查找到的元素的數組下標0開始,(查找到多個時,返回第一個),未查找到時返回-1
*/
var arrInArray = $.inArray(1, arr);
console.log(arrInArray);//返回4

$.merge()合并兩個數組

//將arr2拼接到arr后,返回合并的數組
$.merge(arr, arr2);

$.unique()刪除重復的 DOM 元素(不能處理數字和字符串)

沒太明白,只能刪除拼接過來的重復元素,對自身的元素不受影響? 文檔地址

希望有看明白的教育我一下。。

發一個我實現的普通數組去重吧。(處理數字和字符串)

function uniqArray(arr) {//數組去重
    var result = []; //創建一個新數組。
    for (var i = 0, l = arr.length; i < l; i++) {
        if (result.indexOf(arr[i]) === -1) { //查找是否已經含有該元素
            result.push(arr[i]); //添加到新數組
        }
    }
    return result; //返回去重后的新數組
}

toArray()合并多個dom元素組成數組。

//<ul><li>1</li><li>2</li><li>3</li><li>4</li></ul>
console.log($('li').toArray());//[[li, li, li, li]]。注意數組項是原生的DOM元素。
console.log($('li').toArray().length);//4

測試操作(類型判斷)

在jQuery數據有著各種類型和狀態。可以通過判斷數據的類型和狀態做相應的操作。

測試工具函數

函數名 說明
$.isArray(obj) 判斷是否為數組對象,是返回 true
$.isFunction(obj) 判斷是否為函數,是返回 true
$.isEmptyObject(obj) 判斷是否為空對象,是返回 true
$.isPlainObjet(obj) 判斷是否為純粹對象,是返回 true
$.contains(obj) 判斷 DOM 節點是否含另一個 DOM 節點,是返回 true
$.type(data) 判斷數據類型
$.isNumeric(data) 判斷數據是否為數值
$.isWindow(data) 判斷數據是否為 window 對象

挑幾個出來說明一下

判斷是否為空對象

var obj={a:"1"};
alert($.isEmptyObject(obj));//false。

判斷是由{}或 new Object()創造出的對象

alert($.isPlainObject({a:"1"}));//true
alert($.isPlainObject(new Object("a")));//false

URL解析

其實在Ajax的博客中已經講到了:$.param()將對象鍵值對轉換為 URL 字符串鍵值對

var obj = {
    name : 'Lee',
    email : "guowen921@163.com"
};
console.log( $.param(obj));//name=Lee&email=guowen921%40163.com
console.log(decodeURIComponent( $.param(obj)));//name=Lee&email=guowen921@163.com
//請注意上面的郵箱部分,$.param()會對于特殊字符進行編碼傳輸,下面的代碼,可以將其解析成字符

改變this指向

$.proxy方法類似于ECMAScript 5的bind方法,可以綁定函數的上下文(也就是this對象)和參數,返回一個新函數。

主要用處是為回調函數綁定上下文對象。如如外部事件觸發調用對象方法時 this 的指向問題。

來自javaScript標準參考教程。

//<button>點擊</button>
var o = {
    name: "Lee",
    test: function(event) {
        console.log(this.name);
    }
};
$("button")
  .on("click", o.test) // 無輸出(默認this指向觸發該事件的元素也就是button)
  .on("click", $.proxy(o.test, o)); // Lee,現在指向o

來自: http://guowenfh.github.io/2016/01/03/jQuery-06-toolFunction/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!