国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

「jQuery插件開發(fā)日記」(一)如何建立一個基礎(chǔ)的插件 - [翻譯]

Sunxb / 1838人閱讀

摘要:,翻譯自官方網(wǎng)站。如何建立一個基礎(chǔ)的插件有時,你想要在你的代碼里面實(shí)現(xiàn)一個可復(fù)用的功能。譯者注建立一個基礎(chǔ)的插件假設(shè)我們現(xiàn)在要建立一個讓元素里的文字變綠的插件。鏈?zhǔn)讲僮髯畲蟮奶攸c(diǎn)之一就是支持鏈?zhǔn)讲僮鳌@缱g者注的作用是返還的控制權(quán)。

_How to Create a Basic Plugin_, 翻譯自 jQuery 官方網(wǎng)站。

如何建立一個基礎(chǔ)的插件

有時,你想要在你的代碼里面實(shí)現(xiàn)一個可復(fù)用的功能。
舉個例子,如果你想要在一個 jQuery 對象上調(diào)用一個簡單的方法,來對這個對象進(jìn)行一系列的操作,那么你應(yīng)該寫一個 jQuery 插件。

jQuery是如何工作的

在開始寫插件之前,我們必須對 jQuery 的工作方式有些許的認(rèn)識。來看下面的代碼:

$( "a" ).css( "color", "red" );

這是一句非常基礎(chǔ)的 jQuery 代碼,但是你知道它背后發(fā)生了什么嗎?當(dāng)你使用 $ 去選擇元素的時候,它就會返回一個 jQuery 對象。這個對象包含可用的所有方法(.css(), .click()等)和所有符合你傳入選擇器的元素。

這個對象從 $.fn 對象繼承所有的方法。 $.fn 對象包括所有 jQuery 對象的方法,也就是說,如果你想添加自己的方法的話,你需要將方法添加到 $.fn 對象上。

※ 譯者注 ※
$.fn == $.prototype // true

建立一個基礎(chǔ)的插件

假設(shè)我們現(xiàn)在要建立一個讓元素里的文字變綠的插件。
我們需要做的只是在 $.fn 里添加一個方法 greenify

$.fn.greenify = function() {
    this.css( "color", "green" );
};
 
$( "a" ).greenify(); // Makes all the links green.

注意到我們在這段代碼里面用的是 this 而不是 $(this)。這是因?yàn)樵?greenify 函數(shù)中,this 指代的是 jQuery 對象,所以可以使用 jQuery 的所有方法。

鏈?zhǔn)讲僮?/b>

jQuery 最大的特點(diǎn)之一就是支持鏈?zhǔn)讲僮?。鏈?zhǔn)讲僮鞯膶?shí)現(xiàn)是靠 jQuery 所有的方法返回 jQuery 對象來實(shí)現(xiàn)的(也有一些例外,比如無參數(shù)的 .width() 返回的就是寬度)。

只需要增加一行代碼,我們就可以讓我們的插件變得可以鏈?zhǔn)讲僮鳎?/p>

$.fn.greenify = function() {
    this.css( "color", "green" );
    return this;
};
 
$( "a" ).greenify(); // Makes all the links green.
命名空間

$ 這個變量在很多 JavaScript 庫里都很受歡迎。如果你一起使用 jQuery 和其他的庫,你可能就得用 jQuery.noConflict() 來讓 jQuery 返還對 $ 變量的控制權(quán)了。

然而由于 $ 變量已經(jīng)不是 jQuery 了,我們的插件就沒辦法工作了。要讓我們的插件繼續(xù)工作,并且也可以和其他的庫一起使用,我們需要將我們的代碼放入一個即時執(zhí)行函數(shù)表達(dá)式中,然后將jQuery當(dāng)做參數(shù)傳入,命名為 $

(function ( $ ) {
 
    $.fn.greenify = function() {
        this.css( "color", "green" );
        return this;
    };
 
}( jQuery ));

除了上面提到的兩個功能,即時執(zhí)行函數(shù)增加了一層作用域,讓我們可以定義自己的私有變量。例如:

(function ( $ ) {
 
    var shade = "#556b2f";
 
    $.fn.greenify = function() {
        this.css( "color", shade );
        return this;
    };
 
}( jQuery ));

※ 譯者注 ※
jQuery.noConflict() 的作用是返還 $ 的控制權(quán)。

為什么說是返還呢?因?yàn)?jQuery 在初始化的時候,會記錄$ 這個變量,然后再將 $ 綁定為自身。
所以調(diào)用 jQuery.noConflict(),實(shí)際上是將 $ 賦值為之前記錄的舊值。

減少綁定方法的數(shù)量

當(dāng)編寫插件時,我們最好只在 $.fn 上綁定一個方法。這不僅減少了其他的插件覆蓋你的插件的幾率,也減少了你的插件覆蓋其他插件的幾率。

使用 each() 方法

一般來說,使用選擇器選擇的 jQuery 對象都是一個集合。如果你想對這里的某些元素進(jìn)行操作(比如獲取屬性,計(jì)算位置等),你就需要用到 .each() 方法來進(jìn)行遍歷。

$.fn.myNewPlugin = function() {
 
    return this.each(function() {
        // Do something to each element here.
    });
 
};

※ 譯者注 ※
有讀者可能會問,在之前的代碼中 .css() 并沒有進(jìn)行遍歷,如何使所有元素里的問題都變成綠色?
這是因?yàn)?.css() 方法里已經(jīng)做了這個遍歷的工作了。

注意到我們返回的是 .each() 的結(jié)果,而不是 this。這是因?yàn)?.each() 也是可鏈?zhǔn)讲僮鞯模?它返回的也是 this。不過這樣寫更加契合鏈?zhǔn)讲僮鞯乃枷搿?/p> 接受用戶配置

當(dāng)你的插件變得越來越復(fù)雜的時候,你最好通過接受用戶的配置來讓用戶定制某些功能。

最簡單的方法就是使用一個對象來儲存配置。

(function ( $ ) {
 
    $.fn.greenify = function( options ) {
 
        // This is the easiest way to have default options.
        var settings = $.extend({
            // These are the defaults.
            color: "#556b2f",
            backgroundColor: "white"
        }, options );
 
        // Greenify the collection based on the settings variable.
        return this.css({
            color: settings.color,
            backgroundColor: settings.backgroundColor
        });
 
    };
 
}( jQuery ));

/* Example usage */
$( "div" ).greenify({
    color: "orange"
});

默認(rèn)的顏色值 #556b2f 被用戶定義的值 orange 覆蓋。

※ 譯者注 ※
x.extend([deep], target [,obj1][,objN])

.extend() 方法主要是將所有 obj 的屬性和方法全部添加到 target 上。同名的會覆蓋,而 nullundefined 會被忽略。
當(dāng)只有一個參數(shù)的時候,x 就變成了 target,也就是將這個唯一的參數(shù)的所有方法和屬性全部添加到 x 中。

x 可以是:

$

$.fn

$.extend()$.fn.extend() 的不同也就非常明顯了。

完整的例子
(function( $ ) {
 
    $.fn.showLinkLocation = function() {
 
        this.filter( "a" ).append(function() {
            return " (" + this.href + ")";
        });
 
        return this;
 
    };
 
}( jQuery ));

HTML 結(jié)構(gòu):


Foo
 

Foo (page.html)

※ 譯者注 ※
上面的例子里, this.filter()this.hrefthis 是不同的。前者是 jQuery 對象,后者是 HTMLElement 對象。

var $links = $("a");

$links[0] instanceof HTMLElement; // true
$links.slice(0, 1) instanceof jQuery; // true
$links.each(function(){
    this instanceof HTMLElement; // true
});

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85936.html

相關(guān)文章

  • jQuery插件開發(fā)日記」(二)高級插件理念 - [翻譯]

    摘要:我們也可以在設(shè)置中間允許一個回調(diào)函數(shù),來覆蓋默認(rèn)的函數(shù),這也是一個支持定制的非常棒的方法。對外暴露了一個對象。所以我們的設(shè)置應(yīng)該像這樣對于也可以使用同樣的方法來實(shí)現(xiàn)提供回調(diào)函數(shù)如果你的插件是事件驅(qū)動的話,最好為每個事件提供回調(diào)函數(shù)。 _Advanced Plugin Concepts_,翻譯自 jQuery 官方網(wǎng)站。 默認(rèn)設(shè)置的共有接口 對于上一篇文章最后的代碼,我們可以改進(jìn),也應(yīng)該...

    paulquei 評論0 收藏0
  • [ 前端實(shí)習(xí)日記 ] 構(gòu)建靜態(tài)頁面基礎(chǔ)架構(gòu)

    以前我們敲靜態(tài)頁面都是寫好html,css, js,然后再去刷新瀏覽器,艾尼馬又不行,有重新寫過再刷新,一個頁面下來按chrl+r的次數(shù)可讓你的鍵盤多活好幾天,要不會刷新快捷按鈕那不得手殘了都。 后來,grunt,gulp等工具應(yīng)運(yùn)而生,當(dāng)然它們不止這個功能,但卻很好地減輕了我們的負(fù)擔(dān)。這篇文章介紹一些如何使用這些工具使構(gòu)建頁面變得簡單高效。這只是個人的目前在用的不成熟的方案,更專業(yè)的還請參考...

    lidashuang 評論0 收藏0
  • 小白成長日記步寫個輪播圖插件

    摘要:并不是所有人寫的代碼或者插件都適合小白使用,比如這是一個的滾動插件,大多數(shù)人使用了之后發(fā)現(xiàn)滾動不了,去作者提,其實(shí)是他們并不懂滾動的原理。 最近在這里看了一篇關(guān)于面試的文章《回顧自己三次失敗的面試經(jīng)歷》,作者三次倒在了輪播圖上。囧,所以我也寫個輪播圖看看。這次是用jQuery寫的,因?yàn)樽罱恢痹谘芯縥Query插件的寫法,所以用jQuery寫的,而且我發(fā)現(xiàn),我vue用太多,完全不熟悉d...

    notebin 評論0 收藏0
  • 7月份前端資源分享

    摘要:更多資源請文章轉(zhuǎn)自月份前端資源分享的作用數(shù)組元素隨機(jī)化排序算法實(shí)現(xiàn)學(xué)習(xí)筆記數(shù)組隨機(jī)排序個變態(tài)題解析上個變態(tài)題解析下中的數(shù)字前端開發(fā)筆記本過目不忘正則表達(dá)式聊一聊前端存儲那些事兒一鍵分享到各種寫給剛?cè)腴T的前端工程師的前后端交互指南物聯(lián)網(wǎng)世界的 更多資源請Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/jsfr...

    pingan8787 評論0 收藏0
  • 庫&插件&框架&工具

    摘要:一些有用的一些有用的,包括轉(zhuǎn)換小箭頭三角形媒體查詢等中文指南是當(dāng)下最熱門的前端資源模塊化管理和打包工具。 nodejs 入門 nodejs 入門教程,大家可以在 github 上提交錯誤 2016 年最好用的表單驗(yàn)證庫 SMValidator.js 前端表單驗(yàn)證工具分享 淺談前端線上部署與運(yùn)維 說到前端部署,可能大多數(shù)前端工程師在工作中都是使用的公司現(xiàn)成的部署系統(tǒng),與SRE對接、一起完...

    Codeing_ls 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<