2009-06-05 13 views
8

Wie kann ich alias die Funktion "document.getElementById" Ich habe es mit $Make Alias ​​document.getElementById in Javascript

Dank getan gesehen

+0

Ein smarter Frage wäre gewesen, zu fragen, wie ein erstellen Alias ​​* in beliebiger Tiefe *; z.B. 'document.getElementById ('example'). tag ('div')' aber wie immer werde ich diese Frage stellen und am Ende als dup by dup markieren. – John

Antwort

9

Möglicherweise ist der einfachste/kürzeste Weg:

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

Es ist nicht der kürzeste Weg, und sicherlich nicht der effizienteste. Es ist völlig unnötig, den gleichen Kontext auf eine Funktion anzuwenden, die sowieso ohne 'Function.apply' angewendet wird. Kürzeste Form ist 'Funktion $ (s) {return document.getElementById (s)}' –

+0

Sie haben Recht. Ich dachte, dass getElementById einen optionalen zweiten scope-Parameter braucht, aber das Durchsuchen der Spezifikation (http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-getElBId) ist nicht der Fall . Geändert. –

+1

Dies ist der eine, der die Frage beantwortet, ohne zu versuchen, alle Arten von Rüschen hinzuzufügen –

-1

Wenn Sie den $ gesehen haben() Funktion Wahrscheinlich war es eine Bibliothek wie jQuery oder Prototype. Die $ -Funktion ist kein Alias ​​für document.getElementById, sondern ein Wrapper, der die Funktionalität der Funktion erweitert.

Ihre eigenen Wrapper erstellen, könnten Sie eine Funktion "alias" schreiben:

var alias = document.getElemenyById; 

oder

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

Aber wirklich, ich würde eine der Bibliotheken wie jQuery oder Prototype verwenden .

+0

+1, aber Sie sollten erklären, dass der Grund für die Erstellung eines "Alias" so einfach ist, weil JavaScript erstklassige Funktionen hat – annakata

+0

unter allen Bedingungen/Verwendung wird dieser Alias ​​nie in IE6/7 arbeiten? Ich habe es heute in etwas älterem Code aussprobiert und das Problem wurde gelöst, indem ich den Alias ​​durch document.getElementById ersetzte. Ich habe tatsächlich den zweiten Typ der Funktion "Alias" oben verwendet. Irgendwelche Ideen? –

+7

Der Teil 'var alias = document.getElementById' dieser Antwort ist falsch. Das Erstellen eines Alias ​​wie hier gezeigt funktioniert nicht in Firefox oder Google Chrome. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/1007340. –

3

Hier ist etwas, das ich in meiner eigenen Bibliothek verwende. DOM ist die Klasse und $ ist eine Funktion, die eine Verknüpfung Umsetzung der getElementById Funktion ist:

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; 
    } 
} 

Verbrauch:

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

Sie können es auf der obersten Ebene Fensterelement Pseudonyms gestattet.

+5

Warum verwenden Sie einen Konstruktor, der keinen Status hat? Es sollte 'var DOM = {'$': function (ids) {...}}' sein. Auch Ihre Antwort ist viel mehr als gefragt, OP fragte nach einem Alias ​​für document.getElementById. Wenn Sie jQuery-Verhalten wollen, verwenden Sie einfach jQuery statt das Rad neu zu erfinden –

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

$("myId"); 

Diese Sie nur davon ausgegangen, wollen die Dollar-Funktion (Wähler) verwenden, um eine ID zu erhalten. Ich habe das nicht getestet, aber es sollte funktionieren.

Das letzte Mal, als ich den Kern von jQuery betrachtete, brauchte es einen String als Argument und dann einen regulären Ausdruck, um festzustellen, um was für einen Selektor es sich handelte.

+2

@ hal10001: Das 'riecht' schrecklich für mich. Der zweimalige Aufruf von document.getElementById() erscheint verschwenderisch und diese Funktion gibt entweder ein HTMLElement oder einen String zurück. Wie wäre es mit 'document.getElementById (s) zurückgeben?' ? –

+0

Sie können NULL anstelle der Zeichenfolge zurückgeben, wenn Sie möchten. In jQuery wird ein leeres jQuery-Objekt zurückgegeben, wenn keine ID gefunden wird. Wenn Sie so etwas nicht machen, werden Sie undefiniert. All dies tat wirklich ein Beispiel für den Dollar-Selektor in Aktion. –

+0

Er fragte nicht nach einer jquery $ -Funktion, nur nach einem Alias ​​für document.getElementById. –

0

facebook's connect-js führt Folgendes in src/core/prelude.js:

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

Dann, es zu benutzen, sie tun:

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

dem Anfang Block erzeugt den globalen Objekt-FB. Sie verwenden dieses Objekt, FB, als Namespace und definieren darin alle ihre Objekte, Eigenschaften und Funktionen. Auf diese Weise funktioniert es mit anderem JavaScript-Code, solange dieser andere Code nicht den globalen Objekt-FB verwendet.

+0

es ist keine Antwort ... – galambalazs

+2

ist es jetzt eine Antwort ... – ma11hew28

12
var $ = document.getElemenyById.bind(document); 
+0

Dies sollte der akzeptierte sein. – Ealhad

1

Die neuen Funktionen in ES6 eingeführt lassen Sie uns auf Chris Lloyd Antwort zu verbessern, zu vereinfachen:

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

zu:

const $ = id=> document.getElementById(id); 
Verwandte Themen