2010-08-17 40 views
0

我指的是包装的功能是这样的:

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样式声明”但不是“定义”的东西。

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

谢谢。

+2

你有没有试过'alert(oDiv1.style)'而不是'alert(oDiv.style)'? – kennytm 2010-08-17 15:17:37

+0

第二个可能只是因为你从不声明“oDiv”,你声明了“oDiv1”和“oDiv2”,但从来没有“oDiv”。 – 2010-08-17 15:18:36

+0

'alert(oDiv1 == oDiv2);'正在为我返回'true'。 – RoToRa 2010-08-17 15:26:22

回答

2

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

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

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

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

自定义$功能完美地工作,但如果您使用的是框架函数将返回,而不是DOM元素阵列状物体。

您也可以将您的功能重命名为类似function getID这将是唯一的,不与框架$ s冲突。

+0

你看问题中他的$函数吗?没有阵列。 – epascarello 2010-08-17 15:25:16

+0

为什么'oDiv1'是一个数组? – RoToRa 2010-08-17 15:25:45

+0

他很可能不小心使用另一个'$'函数而不是他定义的函数。也许他在同一页面上有Prototype/jQuery。否则,它不等同于错误。 – 2010-08-17 15:27:36

0

我主要关心的是它会在第一次读取代码时混淆某人,尤其是如果他们习惯于使用jQuery等JavaScript框架进行编码。

由于这个原因,我建议你不要使用这个特定的语法来包装你的包装功能。

+0

要求OP不要使用方便的简写,因为它在其他图书馆很常见,这似乎不是对他的问题的合理回答。使用该逻辑,jQuery不应该使用$,因为Prototype会使用$,反之亦然。由于$()函数,您不能假设JS项目使用特定的库。 – 2010-08-17 15:33:30

+0

接受的答案基本上说我是同样的事情 - 重命名他的功能,因为它与jQuery冲突。 – 2010-08-17 16:01:36

+0

我打算说完全一样的东西。 – Patricia 2010-08-17 16:22:00

0

顺便提一下,即使没有加载jQuery,Firebug也会提供自己的$函数,这可能会导致混淆。

+0

哦,我也用Firebug打了这个页面。 – Jichao 2010-08-18 00:53:40

相关问题