Prototype源碼淺析——元素選取器部分(一)之$

來源:互聯網
上載者:User
簡述  

  $ 方法是 Prototype 的基礎,和jquery中的$作用差不多,不過功能卻弱了很多。因為Prototype中還有一個$$方法,看名字就知道,和$相比,$$加了一倍的錢,功能肯定就豐富撒。本文主要是剖析$方法,1.7版本的$$方法使用的是Sizzle引擎,比較複雜,是後面的事情。

基本原理

  $ 方法其實比較簡單,平時在個人的代碼中見得也比較多。基本原理就是如果傳入的是一個字串,就執行document.getElementById方法,如果是一個DOM元素,就直接返回傳入的元素,代碼實現:

function _$(element){
if(typeof element == 'string'){
element = document.getElementById(element);
}
return element;
}

改進版本,如果傳入的是多個字串id:

//如果傳入的是多個id,保留上面一個函數
function $(element){
if(arguments.length > 1){
for(var i = 0,elements = [],len = arguments.length; i < len; i++){
if(typeof element == 'string'){
element = _$(element);
}
elements.push(element);
}
}
return elements;
}

由於_$中已經做了類型判斷,所以_$1中的還可以換種形式,上面的函數還可以換種形式:

function $(element){
if(arguments.length > 1){
for(var i = 0,elements = [],len = arguments.length; i < len; i++){
elements.push(_$(element));
}
}
return elements;
}

可以組合到一個函數裡面:

function $(element){
if(arguments.length > 1){
for(var i = 0,elements = [],len = arguments.length; i < len; i++){
elements.push($(element));
}
return elements;
}
if(typeof element == 'string'){
element = document.getElementById(element);
}
return element;
//最後一步,這裡返回的是擴充了的Element元素,於是return Element.extend(element);
}

需要說明的一點是,上面只是擷取了目標元素,而且返回的結果裡麵包含的都是原生的DOM元素,相比Prototype的實現,少了一步元素的擴充,這個留到Element部分。

轉載請註明來自小西山子【http://www.cnblogs.com/xesam/】
本文地址:http://www.cnblogs.com/xesam/archive/2012/02/03/2336981.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.