2009-06-05 37 views
8

我怎樣才能別名功能「的document.getElementById」 我已經看到了使用$製作別名的document.getElementById在Javascript

感謝

+0

一個聰明的問題會一直詢問如何創建別名*在任何深度*;例如`的document.getElementById(「示例」)。標籤(「格」)',雖然像往常一樣,我會問這個問題,並最終有它標記爲一個DUP一個DUP。 – John 2018-02-26 12:04:29

回答

9

可能最簡單的/最簡單的辦法:

function $(id) { return document.getElementById(id); }; 
-1

當你已經看到了做$()函數,它可能是一些庫,如jQuery或Prototype。 $函數不是的document.getElementById的別名,但是擴展功能的功能性的包裝。

要創建您自己的包裝,你可以寫一個函數「別名」:

var alias = document.getElemenyById; 

function alias(id) { return document.getElementById(id); } 

不過說真的,我會用如jQuery或原型可用庫之一。

+0

+1,但你應該解釋,創建一個「別名」的原因是這麼簡單,因爲在任何條件下/使用JavaScript具有一流的功能 – annakata 2009-06-05 16:24:36

+0

將這個別名永遠不會在IE6/7工作?我今天在一些較舊的代碼中遇到了問題,通過用document.getElementById替換別名來解決問題。我實際上使用了上面第二種類型的函數「別名」。有任何想法嗎? – 2009-06-12 05:01:05

+7

此答案的'var alias = document.getElementById'部分不正確。這裏演示的創建別名在Firefox或Google Chrome中不起作用。有關更多信息,請參閱http://stackoverflow.com/questions/1007340。 – 2009-06-17 21:28:10

3

這裏的東西我在我自己的圖書館使用。 DOM是類和$是一個函數,它是一個快捷方式實現getElementById功能:

function DOM() 
{ 
    this.$ = function(elementIDs) 
    { 
    var el; 

    // If an array of element names is passed. 
    if (arguments.length > 1) 
    { 
     var elements = []; 
     var length = arguments.length; 
     for (var i = 0; i < length; i++) 
     { 
     // Call this function recursively for each passed parameter. 
     elements.push(this.$(arguments[i])); 
     } 
     return elements; 
    } 

    // If a single element name is passed. 
    if (typeof(elementIDs) == "string") 
    { 
     el = document.getElementById(elementIDs); 
    } 
    return el; 
    } 
} 

用法:

var el = new DOM().$("elementID"); 

你可以別名,從而頂層窗口元素。

+5

你爲什麼使用一個沒有任何狀態的構造函數?它應該是`var DOM = {'$':function(ids){...}}`。另外,你的答案比詢問的要多得多,OP要求給document.getElementById一個別名。如果你想jQuery的行爲,只需使用jQuery而不是重新發明輪子 – 2011-03-01 20:00:33

0
function $(s) { 
    return document.getElementById(s) ? document.getElementById(s) : ""; 
} 

$("myId"); 

這假定您只想使用美元函數(選擇器)來獲取ID。我沒有測試,但它應該工作。

我最後一次看的jQuery的核心,它把一個字符串作爲參數,然後使用正則表達式來確定它是什麼樣的選擇的。

+2

@ hal10001:這'聞起來'對我來說很可怕。調用document.getElementById()兩次看起來很浪費,這個函數返回一個HTMLElement或一個String。那麼'return document.getElementById(s)'怎麼樣?' ? – 2009-06-17 21:34:46

0

facebook's connect-js確實在src/core/prelude.js如下:

if (!window.FB) { 
    FB = { 
    // ... 
    $: function(id) { 
     return document.getElementById(id); 
    } 
    // ... 
    } 
} 

然後,要使用它,他們這樣做:

FB.$('name-of-id'); 

初始塊創建全局對象FB。他們使用這個對象,FB,爲命名空間和定義在它所有的對象,屬性和功能。這樣,只要其他代碼不使用全局對象FB,它就可以與其他JavaScript代碼一起工作。

12
var $ = document.getElemenyById.bind(document); 
1

在ES6引入的新功能讓我們提高克里斯·勞埃德的回答,簡化:

function $(id) { return document.getElementById(id); }; 

到:

const $ = id=> document.getElementById(id); 
相關問題