将document.getElementById设置为variable

时间:2012-03-21 12:42:04

标签: javascript variables getelementbyid

以下作品:

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

这不是:

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

有关为什么不起作用或如何制作的任何想法?

5 个答案:

答案 0 :(得分:11)

this的值取决于您如何调用该函数。

当您致电document.getElementById时,getElementById会获得this === document。当您将getElementById复制到其他变量,然后将其称为$,然后this === window(因为window是默认变量)。

这会导致它在窗口对象中而不是在文档对象中查找id,并且由于窗口不是文档而且没有相同的方法,因此会失败。

您需要在通话中保持document。您可以使用包装函数,例如

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

...但请不要使用$。这是一个可怕的名字。它没有任何意义,它会让看到它的人感到困惑并想到“啊!我知道jQuery!”或者“啊!我知道原型”等等。

答案 1 :(得分:4)

上下文对象不同。当您获得函数的引用时,您正在更改该上下文对象:

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"

如果您希望绑定到特定上下文对象的引用函数,则必须使用bind

peter.hello = john.hello.bind(john);

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

所以在你的情况下它将是:

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

答案 2 :(得分:1)

getElementByIdHTMLDocument原型的一种方法(其中document是一个实例)。因此,在全局上下文中调用该函数肯定会得到“错误的错误”或其他内容。

您可以使用

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

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

也可以,也许更好理解。

答案 3 :(得分:1)

不知道你想要实现什么,但这可以像这样工作

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

因为getElementById只是document的函数,因为它需要的范围才有效。

但我会推荐@ Quentin的答案。

答案 4 :(得分:0)

如果你想要达到类似的效果,我建议使用jQuery。他们的$符号比仅通过id获取元素要强大得多。

此外,如果您使用的任何平台已经使用$作为变量(ASP .Net有时会使用它),您可能会产生不可预测的结果。