javascript variables getelementbyid

javascript - getelementbyid jquery



Establezca document.getElementById en la variable (5)

El objeto de contexto es diferente. Cuando obtiene una referencia de una función, está cambiando ese objeto de contexto:

var john = { name : "john", hello : function () { return "hello, I''m " + this.name } } var peter = { name : "peter" }; peter.hello = john.hello; peter.hello() // "hello, I''m peter"

Si desea una función de referencia vinculada a un objeto de contexto específico, debe usar bind :

peter.hello = john.hello.bind(john); peter.hello(); // "hello, I''m john"

Entonces en tu caso será:

var $ = document.getElementById.bind(document);

Los siguientes trabajos:

$ = document.form; x = $.name.value;

Esto no:

$ = document.getElementById; x = $("id").value;

¿Alguna idea sobre por qué esto no funciona o cómo hacerlo?


El valor de this depende de cómo llame a la función.

Cuando llamas a document.getElementById , getElementById obtiene this === document . Cuando copie getElementById en una variable diferente y luego lo llame como $ entonces this === window (porque window es la variable predeterminada).

Esto hace que busque la identificación en el objeto de la ventana en lugar de hacerlo en el objeto del documento, y eso falla horriblemente porque las ventanas no son documentos y no tienen los mismos métodos.

Debe mantener el document en la llamada. Puede usar una función de envoltura para esto, por ejemplo

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

... pero por favor no use $ . Es un nombre horrible. No tiene ningún significado y confundirá a las personas que lo vean y piensen "¡Ah, lo sé, jQuery!" o "¡Ah, sé prototipo", etc.


No sé lo que quiere lograr, pero esto puede hacerse trabajando así

$ = document.getElementById; x = $.call(document, "id").value;

porque getElementById solo funciona cuando es una función del document debido al alcance que necesita.

Pero recomendaría la respuesta de @ Quentin.


Si intentas lograr algo así, te sugiero usar jQuery . Su notación $ es mucho más poderosa que solo obtener un elemento por id.

Además, si está utilizando una plataforma que ya usa $ como variable (ASP .Net a veces usa esto), puede tener un resultado impredecible.


getElementById es un método del prototipo HTMLDocument (cuyo document es una instancia). Por lo tanto, al llamar a la función en un contexto global, seguramente obtendrás un "Error incorrecto" o algo así.

Puedes utilizar

var $ = document.getElementById.bind(document);

pero

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

también está bien y quizás sea mejor entenderlo.