2009-06-05 9 views
8

Come posso alias la funzione "document.getElementById" ho visto fare con $Crea alias per document.getElementById in Javascript

Grazie

+0

Una domanda più intelligente sarebbe stata quella di domandare come creare un alias * a qualsiasi profondità *; per esempio. 'document.getElementById ('example'). tag ('div')' anche se come al solito farò quella domanda e finirò per averlo contrassegnato come dup da un dup. – John

risposta

9

Forse il/via più breve più semplice:

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

Non è il modo più breve, e certamente non il più efficiente. Non è assolutamente necessario applicare lo stesso contesto a una funzione che viene comunque applicata senza 'Function.apply'. La forma più breve è 'function $ (s) {return document.getElementById (s)}' –

+0

Hai ragione. Pensavo che getElementById potesse prendere un parametro opzionale per il secondo scope ma cercando le specifiche (http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-getElBId) questo non è il caso . Modificato. –

+1

Questo è quello che risponde alla domanda senza provare ad aggiungere tutti i tipi di fronzoli –

-1

Quando hai visto il $ function() , probabilmente era una libreria come jQuery o Prototype. La funzione $ non è un alias per document.getElementById, ma è un wrapper che estende la funzionalità della funzione.

per creare il proprio involucro, si potrebbe scrivere un "alias" Funzione:

var alias = document.getElemenyById; 

o

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

Ma in realtà, vorrei utilizzare una delle librerie disponibili come jQuery o Prototype .

+0

+1 ma dovresti spiegare che la ragione per cui creare un "alias" è così semplice perché javascript ha funzioni di prima classe – annakata

+0

in qualsiasi condizione/utilizzo questo alias non funzionerà mai in IE6/7? Oggi ho avuto un bug in qualche vecchio codice e il problema è stato risolto sostituendo l'alias con document.getElementById. In realtà ho usato il secondo tipo di funzione "alias" sopra. Qualche idea? –

+7

La parte "var alias = document.getElementById" di questa risposta non è corretta. La creazione di un alias come dimostrato qui non funziona in Firefox o Google Chrome. Vedi http://stackoverflow.com/questions/1007340 per ulteriori informazioni. –

3

ecco qualcosa che uso nella mia libreria. DOM è la classe e $ è una funzione che è un'implementazione rapida della funzione 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; 
    } 
} 

Usage:

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

Puoi alias per l'elemento superiore finestra di livello.

+5

Perché stai usando un costruttore che non ha nessuno stato? Dovrebbe essere 'var DOM = {'$': function (ids) {...}}'. Inoltre, la tua risposta fa molto più di quanto è stato chiesto, OP ha chiesto un alias a document.getElementById. Se vuoi il comportamento di jQuery, usa jQuery invece di reinventare la ruota –

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

$("myId"); 

Questo presuppone che si desidera utilizzare solo la funzione dollaro (selettore) per ottenere un ID. Non l'ho provato, ma dovrebbe funzionare.

L'ultima volta ho guardato il nucleo di jQuery, essa ha una stringa come argomento e poi utilizzato un'espressione regolare per determinare quale tipo di selettore è stato.

+2

@ hal10001: Questo "odore" è orribile per me. Chiamare document.getElementById() due volte sembra uno spreco e questa funzione restituisce un HTMLElement o una stringa. Che ne dici di "restituire document.getElementById (s);" ? –

+0

Se vuoi, puoi restituire null invece della stringa. In jQuery, viene restituito un oggetto jQuery vuoto se non viene trovato alcun ID. Se non fai qualcosa del genere, non sei definito. Tutto ciò ha fatto davvero dare un esempio del selettore del dollaro in azione. –

+0

Non ha richiesto una funzione $ jquery, solo un alias per document.getElementById. –

0

facebook's connect-js esegue le seguenti operazioni in src/core/prelude.js:

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

Quindi, per utilizzarlo, lo fanno:

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

L'iniziale il blocco crea l'oggetto globale FB. Usano questo oggetto, FB, come spazio dei nomi e definiscono tutti i loro oggetti, proprietà e funzioni al suo interno. In questo modo, funzionerà con altro codice JavaScript purché quell'altro codice non utilizzi l'FB dell'oggetto globale.

+0

non è una risposta ... – galambalazs

+2

è ora una risposta ... – ma11hew28

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

Questo dovrebbe essere accettato. – Ealhad

1

Le nuove funzionalità introdotte in ES6 ci permettono di migliorare la risposta di Chris Lloyd, semplificando:

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

a:

const $ = id=> document.getElementById(id); 
Problemi correlati