$ wrap函数和getElementById之间有什么区别吗?

时间:2010-08-17 15:16:14

标签: javascript css

我的意思是像这样的换行函数:

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

但在某些代码中这样:

oDiv1 = $("postInfoDiv");
oDiv2 = document.getElementById("postInfoDiv");
alert(oDiv1 == oDiv2);                     // return false
alert(oDiv1.style);                            // error
alert(oDiv2.style);                            // correct
alert(document.getElementById("postInfoDiv").style); // correct

评论意味着我得到了奇怪的结果 我认为第一个警报应该返回true,因为它们是同一个dom对象 我认为第二个警报应该警告类似“对象”或“CSS StyleDeclaration”但不是“已定义”的内容。

那么问题是什么?你遇到过这种问题吗?

感谢。

3 个答案:

答案 0 :(得分:2)

您的$函数可能被框架覆盖。

您应该尝试alert( oDiv1.nodeType )来查看它是否是DOM元素。 alert( oDiv1.length )查看它是否为空数组,因为您可能在覆盖$函数的同一页面上使用jQuery。

如果包含jQuery,

oDiv1可能是包含该项的类数组对象。 oDiv2是一个实际的DOM引用。您可能需要将oDiv1[0]oDiv1进行比较,其中您引用数组中指向实际 dom元素的第一个元素,以进行公平比较。

function $(id){return document.getElementById(id)}
$('content') == document.getElementById('content')
true

自定义$函数将完美地工作,但如果您使用框架函数,它将返回该类数组对象而不是DOM元素。

您还可以将您的函数重命名为function getID,这将是唯一的,不会与框架$冲突。

答案 1 :(得分:0)

我主要担心的是,当他们第一次阅读你的代码时,它会让人感到困惑,特别是如果他们习惯使用jQuery这样的JavaScript框架进行编码。

仅凭这个原因,我建议您不要将此特定语法用于包裹函数。

答案 2 :(得分:0)

BTW请注意,即使没有加载jQuery,Firebug也会提供自己的$函数,这可能会引起混淆。