西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → 淺談jQuery.each()函數(shù)以及jQuery的鏈?zhǔn)秸{(diào)用

淺談jQuery.each()函數(shù)以及jQuery的鏈?zhǔn)秸{(diào)用

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時間:2010/12/3 8:38:32字體大。A-A+

作者:佚名點擊:320次評論:0次標(biāo)簽: jQuery 鴨子法則 jquery對象

  • 類型:編程輔助大小:109KB語言:中文 評分:5.0
  • 標(biāo)簽:
立即下載
 話說回來,雖然jQuery讓學(xué)習(xí)前端技術(shù)的越來越多了起來,(本人就是因為學(xué)校圖書館偶然間遇到了一本jQuery基礎(chǔ)教程(二)開始想深入的學(xué)習(xí)前端技術(shù)),關(guān)于jQuery的博文甚至多于javascript,它讓編程的門檻大大的降低了,但是它隱藏了太多細(xì)節(jié)了,形如$('#id').append('<p>xxx</p>').clone().appendTo(x).end().css(...)................這樣操作的模式已經(jīng)很難找到常規(guī)javascript的影子。瀏覽器的差異仿佛一去就不見了蹤影,我不認(rèn)為大部分都能在這安逸的環(huán)境再重新回到考慮javascript如何在不同瀏覽器能表現(xiàn)一致等問題,是福是禍真的很難說。

接下來言歸正傳.....說正經(jīng)的

由于$()函數(shù)返回的是一個包裹了原生dom對象數(shù)組的對象,并且在此對象原型上擴(kuò)展的函數(shù)都是為了操作原生的dom對象,所以少不了循環(huán)遍歷的操作,熟悉jquery庫的人都知道有個jQuery.each()函數(shù) ,大部分的涉及jquery對象的函數(shù)都會用到這個函數(shù): 簡單的實現(xiàn)應(yīng)該是形如這樣:

(再次重申,只是簡單的實現(xiàn)原理,不要考慮具體的功能性問題)

if (!window['$'])
        window[
'$'] = window['jQuery'];
   
/*這里以上區(qū)域為上一篇文章的閉包內(nèi)的內(nèi)容
     * 定義jQuery.each 根據(jù)傳入對象來執(zhí)行操作
     * @param {Object} obj
     * @param {Object} func
     *簡單起見我只考慮了數(shù)組以及jQuery對象兩種情況,跟上一篇一樣,原理應(yīng)該是一致的
    
*/
    window[
'jQuery']['each']=function(obj,func){
       
if(obj.constructor==Array){
           
for(var i=0;i<obj.length;i++){
                func.call(obj[i],i,obj[i]);
//可以看到傳入的func 應(yīng)該是形如function(i,item)  i代表遍歷到的下標(biāo),item則代表在數(shù)組中遍歷到的對象
            }
        }
else if(obj.elements&&obj.elements.constructor==Array){//這里采用了傳說的鴨子法則,而不是判定它是不是jQuery的實例 只要你有Array類型的elements我就對你進(jìn)行操作
            for(var i=0;i<obj.elements.length;i++){
                func.call(obj.elements[i],i,obj.elements[i]);
//可以看到傳入的func 應(yīng)該是形如function(i,item)  i代表遍歷到的下標(biāo),item則代表在數(shù)組中遍歷到的對象
            }
        }
else{
           
return null;
        }
    }

在這個函數(shù)的基礎(chǔ)之上可以開始擴(kuò)充_jQuery的prototype了;首先就是先寫一個包裝器對象可以直接調(diào)用的方法each:(這個并不是重復(fù)),然后通過調(diào)用這個each函數(shù)可以完成對對象數(shù)組的遍歷,

比如:
//寫在閉包內(nèi)  注意將昨天命名沖突了的jQuery構(gòu)造函數(shù)名稱改為_jQuery
    _jQuery.prototype = {
        each:
function(func){
            jQuery.each(
this, func);
           
return this;
        },
        attr:
function(key, value){ 
 //示例定義這個set與get于一身的操作屬性的函數(shù)


            if (arguments.length == 0) {
               
return null;
            }
           
else
               
if (arguments.length == 1) {
                   
return this.elements[0].getAttribute(key);
                }
               
else if(arguments.length == 2){
                   
this.each(function(i, item){
    
//這里可以看到重新定義each方法的好處一:精簡代碼 ,二:在內(nèi)部函數(shù)中this仍然是指向調(diào)用的包裝器對象而不是window
                        item.setAttribute(key, value);
                    })
                  

                }
        }
       
/*
         * 這里可以開始引入其他方法
        
*/
       
       
    }


接下來做幾個簡單的測試:(還是上一篇的測試html)

  輸入:

       var k= $('#header');
consoles.write(k.attr('title','test title!').attr('title')); //鏈?zhǔn)秸{(diào)用


  輸出:

test title!

依此類推,依靠each方法可以有效的擴(kuò)充包裝器的方法。

之前說的影響到j(luò)Query的鏈?zhǔn)秸{(diào)用的要點有三點,事實事后一想完全不是那么簡單,jQuery內(nèi)部代碼的維護(hù)感覺并不比有些庫好,雖然至少在操作上來講使用起來非常順手(當(dāng)然只是針對一些小的操作,大的項目一時也無法接觸到,也不好跟著一些大大人云亦云). 不過就算僅僅從遍歷操作來看, 也可以看到其實這個庫只能依托細(xì)化的插件,擴(kuò)充下去只會顯得臃腫不堪。

注:如果有仔細(xì)剖析了jquery源碼的人肯定會對我如此拙劣的所謂的實現(xiàn)嗤之以鼻,我的確只是看了幾本比如javascript dom高級程序設(shè)計 以及javascript 高級程序設(shè)計 設(shè)計模式等好書之后有感而發(fā)而已,可能跟具體的jquery的實現(xiàn)有很大的落差,可以的話希望可以指正一下。
    html編輯器
    (73)html編輯器
    我們做網(wǎng)頁的時候最難找的就是編輯器,網(wǎng)上找一個吧,要不是圖片上傳錯誤,就是到處都是錯誤,垃圾太多.大家都需要一個簡單,速度快的.西西為您提供最好用的編輯器一站式下載編輯器定義編輯器指的是一類編輯制作工具,可自定義窗囗,編輯主題索引,可選擇添搜索頁,無任何不自由。編輯器哪個好用小編個人比較喜歡使用和,這兩款編輯器軟件都有不錯的表現(xiàn)。至于編輯器哪個好用,這就要根據(jù)你的個人需求去選擇對應(yīng)的編輯器啦...更多>>
    • UltraEdit-32中文版21.20.1001 中文

      06-29 / 19.5M

      推薦理由:ultraEdit 32 破解版 簡體中文 內(nèi)有安裝說明,完全免費,無試用期的。該軟件功能強大,能打開各種格式的文件
    • pyscripter x642.5.3 官方最新版

      11-10 / 4.7M

      推薦理由:python編輯器,代碼補全、參數(shù)提示補全工具,這個工具其實非常重要,可以大大提高開發(fā)效率,減少出錯。很滿
    • 快手AAuto Studio10.152 綠色中文免

      02-20 / 8.5M

      推薦理由:快手aauto是由一鶴軟件耗時四年開發(fā)新一代編程語言。完美支持靜態(tài)類型、動態(tài)類型,完美支持com、dllapi、re
    • ultraedit64位破解版v22.20.0.49 綠

      03-31 / 37.9M

      推薦理由:UltraEdit是最強大的一款超值文本編輯器!ultraedit64位破解版,適用于Windows64位系統(tǒng)使用,此版為綠色破解
    • Dreamweaver cs6中文版官方原版

      11-19 / 279.7M

      推薦理由:AdobeDreamweaverCS6是AdobeCreativeSuite6系列中的HTML編輯器和網(wǎng)頁設(shè)計軟件,是最優(yōu)秀的可視化網(wǎng)頁設(shè)計工
    • Adobe Dreamweaver CS5官方簡體中文

      05-15 / 436.8M

      推薦理由:Adobe Dreamweaver CS5 軟件使設(shè)計人員和開發(fā)人員能充滿自信地構(gòu)建基于標(biāo)準(zhǔn)的網(wǎng)站。由于同新的 Adobe CS Li
    dreamweaver cs6
    (14)dreamweaver cs6
    新版本使用了自適應(yīng)網(wǎng)格版面創(chuàng)建頁面,在發(fā)布前使用多屏幕預(yù)覽審閱設(shè)計,可大大提高工作效率。改善的性能,更高效地傳輸大型文件。實時視圖和多屏幕預(yù)覽面板可呈現(xiàn)代碼,更能夠檢查自己的工作。曾經(jīng)風(fēng)靡一時的網(wǎng)頁三劍客成員之一是目前應(yīng)用最廣的網(wǎng)頁制作軟件,原本是由公司所開發(fā)的著名網(wǎng)站開發(fā)工具,隨被收購后,改名為。它是第一套針對專業(yè)網(wǎng)頁設(shè)計師特別發(fā)展的視覺化網(wǎng)頁開發(fā)工具,以及在之后推出的針對專業(yè)網(wǎng)頁圖像設(shè)計的,三者...更多>>
    • Dreamweaver cs6中文版官方原版

      11-19 / 279.7M

      推薦理由:AdobeDreamweaverCS6是AdobeCreativeSuite6系列中的HTML編輯器和網(wǎng)頁設(shè)計軟件,是最優(yōu)秀的可視化網(wǎng)頁設(shè)計工
    • Dreamweaver cc amtlib.dll補丁

      07-05 / 834KB

      推薦理由:Adobe Dreamweaver CC 13.0 build 6390多語言正式版的破解補丁,破解后程序不再提示剩余天數(shù)與激活注冊。關(guān)
    • Dreamweaver CS5 HTML 5 擴(kuò)展包

      06-22 / 5.7M

      推薦理由:安裝了該擴(kuò)展后再也不用擔(dān)心不記得難記的css3樣式代碼了! 剛裝 Dreamweaver CS5 的時候,發(fā)現(xiàn)新建文檔的時
    • Dreamweaver插件包西西整理

      01-08 / 2.7M

      推薦理由:西西小編整理的一些比較常用的Dreamweaver插件,希望能對大家有所幫助!persistent_layers 不管滾動條如何拉
    • Adobe Dreamweaver CS4中文精簡版

      04-11 / 84.5M

      推薦理由:使用業(yè)界領(lǐng)先的Web 創(chuàng)作工具之一構(gòu)建世界級的網(wǎng)站和應(yīng)用程序。Adobe® Dreamweaver® CS4 軟件是 W
    • Dreamweaver jQuery智能提示插件1.

      07-31 / 109KB

      推薦理由:1.2.0版本插件在1.0.0插件基礎(chǔ)上進(jìn)一步修改,版權(quán)信息僅保留致謝信息,刪除作者為了代碼整體提示美觀度,故

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)