2010-10-15 91 views
4

由于某种原因,这种情况非常模糊。有时它的工作有时不是。相同的代码行,对于同一父代下的不同“myid”,行 -getElementByID()。parentNode返回null

document.getElementById("myid").parentNode返回null。

我确定元素“myid”不是根元素,它的父元素是需要返回的DIV。我正在使用Firefox 3.6.10版本。

任何人都可以提出任何理由,为什么会发生这种情况?

编辑:这里的“myid”是某种文本框或任何其他控件元素。但是父节点总是DIV。我们添加的任何控件总是包装在DIV下。所以基本上当屏幕上的东西刷新时,我们得到父节点并替换innerhtml。 innerhtml可以是任何东西。下面给出

是我的HTML -

<div style="height: 334px; width: 769px; position: relative;"> 

    <span style="display: inline-block; height: 13px; width: 61px; position: absolute; left: 393px; top: 84px;" bizappid="System856UserGroupAppPoint156d5elabel300" tabindex="-1" id="System856UserGroupAppPoint156d5elabel300">User Group</span> 

    <input type="text" style="height: 20px; width: 221px; position: absolute; left: 503px; top: 77px;" bizappid="System856UserGroupAppPoint156d5etextBox190" class="formtextbox" tabindex="400" id="System856UserGroupAppPoint156d5etextBox190" readonly="readonly" name="System856UserGroupAppPoint156d5etextBox190"> 
</div> 

在这个网站中,假设我正在为ParentNode SPAN元素,但我没有得到的输入文本元素相同parentNode。还有一件更奇怪的事情是,我只是添加了一个检查,说明getelementbyid是否为空,然后检查其父节点。如果parentNode不为空,则进一步添加,然后执行刷新操作。现在控件不会进入parentNode非null状态。

+0

有没有改变DOM的改变?你可以张贴更多的代码,特别是。 HTML? – Nivas 2010-10-15 11:55:47

+0

您是否执行了一些可能导致元素或其父元素死亡的JavaScript DOM操作? – 2010-10-15 11:55:59

+0

@Nivas - DOM在“myid”元素的子级上发生了变化,但父级没有变化。无法发布任何代码,但编辑了我的问题更多的细节。希望它可以帮助你。 – 2010-10-15 12:05:44

回答

6

如果页面上的两个或多个元素共享相同的“id”值,则getElementById(可能)会返回节点列表,而不是DOM参考。节点列表实例没有“parentNode”属性。

不要为多个元素重复使用“id”值是这个故事的寓意。

+0

您应该添加一些调试代码,或者在调试器中设置一个断点,并找出getElementById()返回的内容。 – Pointy 2010-10-15 13:24:55

+0

有多个ID,具有讽刺意味的是,在渲染时验证uniqueID时存在一个错误。谢谢哥们。 – 2010-10-15 13:34:55

1

应该是document.getElementById("myid").parentNode

+0

我只使用了document.getElementById(“myid”)。无论如何,编辑我的问题。 – 2010-10-15 12:42:06

+0

我认为Cauly正在讨论'getElementById'而不是'getElementByID'(函数名称是个案感言) – romaintaz 2010-10-15 12:59:58

+0

@romaintaz - 这是我的拼写错误。再次编辑问题。它的ID只有小。 – 2010-10-15 13:05:43

相关问题