getElementByID().parentNode 返回的是 null

7

由于某种原因,这个问题发生得非常模糊。有时候它能正常工作,有时候却不能。同样的代码行,在相同父元素下的不同“myid”中,该行 -

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

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

是否有人能够建议任何可能出现这种情况的原因?

编辑:这里的“myid”是一些文本框或其他控件元素。但是parentnode始终是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>

在这个HTML中,假设我正在获取Span元素的ParentNode,但是我没有获取相同的Input文本元素的parentNode。还有一个奇怪的事情是,我只是添加了一个检查,如果getelementbyid不为空,则检查它的parentNode。然后进一步添加了如果parentNode不为空,则执行刷新操作。现在控件不会进入parentNode不为空的条件。

有没有正在进行的更改来改变DOM?你能发布更多的代码,特别是HTML吗? - Nivas
如果您能发布包含getElementById调用的代码,那将会很有帮助。如果getElementById确实返回文档内的节点,则parentNode不可能为空。因此,一定发生了其他事情。 - Pointy
在页面上执行“查看源代码”,复制呈现的代码并发布。不,没有任何许可或其他任何东西会导致失败。我怀疑你的“getElementById()”本身由于某种原因返回null。如果没有看到您的实际代码,就无法说出原因。 - Pointy
@Pointy - 真正的问题是,查看源代码并不能显示实际的代码。它只会显示一个控制节点元素,稍后会被实际的 HTML 替换。这就是为什么我无法获取该 HTML 的原因。好吧,让我尝试通过调试代码或其他方式获取其中的一部分。 - Sachin Shanbhag
@Pointy - JavaScript 代码只是 var obj = document.getElementById("System856UserGroupAppPoint156d5elabel300"); if( obj ) { var parentNode = obj.parentNode; } - Sachin Shanbhag
显示剩余5条评论
2个回答

9
如果您的页面上存在两个或多个元素共享相同的“id”值,则getElementById(可能)返回一个节点列表而不是DOM引用。 节点列表实例没有“parentNode”属性。
不要重复使用一个“id”值来标识多个元素,这是这个故事传达的道理。

你应该添加一些调试代码或在调试器中设置断点,然后找出 getElementById() 返回的值是什么。 - Pointy
有多个ID,具有讽刺意味的是,在渲染时唯一ID的验证中出现了一个错误。谢谢伙计。 - Sachin Shanbhag

2

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


我只使用了document.getElementById("myid")。无论如何,我已经编辑了我的问题。 - Sachin Shanbhag
我认为Cauly所说的是getElementById而不是getElementByID(函数名称区分大小写)。 - Romain Linsolas
@romaintaz - 这是我的笔误。我再次编辑了问题。它的ID只有小写。 - Sachin Shanbhag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接