以下工作:设置的document.getElementById可变
$ = document.form;
x = $.name.value;
这不:
$ = document.getElementById;
x = $("id").value;
为什么这不工作或如何使它所以任何想法?
以下工作:设置的document.getElementById可变
$ = document.form;
x = $.name.value;
这不:
$ = document.getElementById;
x = $("id").value;
为什么这不工作或如何使它所以任何想法?
如果你正试图达到这样的东西,我会建议使用jQuery。他们的$符号比仅仅通过id获取元素更加强大。另外,如果您使用任何已经使用$作为变量的平台(ASP .Net有时会使用此变量),则可能会产生不可预测的结果。
this
的值取决于您如何调用该函数。
当您拨打document.getElementById
时getElementById
得到this === document
。当您将getElementById
复制到不同的变量,然后将其作为$
然后this === window
(因为window
是默认变量)。
然后,这会导致它在窗口对象中而不是在文档对象中查找id,并且由于窗口不是文档而且没有相同的方法,所以可能会非常糟糕。您需要在通话中维护document
。你可以使用一个包装函数来处理这个例如
function $ (id) { return document.getElementById(id); }
...但是请不要使用$
。这是一个可怕的名字。它没有任何意义,它会让看到它的人感到困惑,并且会想“啊!我知道jQuery!”或“啊!我知道原型”等等。
$有“ID选择器方法”的含义,所以一切都OK了。 – Bergi 2012-03-21 12:52:59
@Bergi - 不,它没有。例如,在jQuery中,它的意思是“从CSS选择器获取元素的集合**或**从HTML **的片段生成节点的集合或者**在DOMReady事件触发时运行此函数”。 – Quentin 2012-03-21 12:56:18
看看[这些评论](http://stackoverflow.com/a/6398800/1048572)。此外,jQuery是一个非常好的例子,您为什么不应该重载超级集合选择器函数。 – Bergi 2012-03-21 13:02:48
getElementById
是HTMLDocument
原型(其中document
是一个实例)的方法。所以,在全局环境中调用函数,你肯定会得到“错误的错误”或什么的。
您可以使用
var $ = document.getElementById.bind(document);
但
function $(id) { return document.getElementById(id); }
也行,也许更好的理解。
不知道你想达到的目标,但是这可犯了这样的
$ = document.getElementById;
x = $.call(document, "id").value;
因为getElementById
作品只有当它是因为它需要范围的document
功能工作。
但我会推荐@昆汀的答案。
演示:http://jsfiddle.net/5V5w3/ – Zeta 2012-03-21 12:53:04
上下文对象不同。当你得到一个函数的引用您要改变这种情况下对象:
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);
您可能会发现字里行间你的答案在这个岗位/回答:http://stackoverflow.com/a/9612657/77047 – 2012-03-21 12:48:38
我不知道这是一封xact重复本身,但这涵盖了相同的基础http://stackoverflow.com/questions/6398787/javascript-shorthand-for-getelementbyid – lonesomeday 2012-03-21 12:50:44