document.getElementById 抛出 TypeError

Posted

技术标签:

【中文标题】document.getElementById 抛出 TypeError【英文标题】:document.getElementById throws TypeError 【发布时间】:2011-10-03 11:00:24 【问题描述】:

我对 javascript 有点陌生。我正在编写这个虚拟脚本来测试我的大页面需要什么。我想,最简单的是,获取 href 的值,然后更改 href 的值,然后再次查看它。为了简单起见,现在我已经删除了更改 href 值的部分,并且只调用了两次属性值。但是第二次访问属性值时,它显示了我在下面发布的错误。我发布了两份错误日志,一份来自 Firebug,一份来自 Dragonfly(来自 Opera)。

任何帮助将不胜感激。谢谢。

脚本的另一个问题是它永远无法完成加载。我总是在标签标题中看到(在 Firefox 3.6.8 中)小加载标志。它并没有给我带来太多困扰,但如果有人有想法请告诉我。

<!-- This file is used to set attribute value for href. -->
<html>
<head>

<script type="text/javascript">
   function hrefvalue()

var thisthang = document.getElementById("1").childNodes[0].getAttribute("href");
document.write(thisthang);
document.write("\n");

var newnew21 = document.getElementById("1").childNodes[0].getAttribute("href");
document.write(newnew21);

</script>

</head>

<body>

<div id="1"><a href="focusdude.htm">click here</a></div>
<button type="button" onclick="hrefvalue()">Click me instead</button>

</body>
</html>

错误日志: 1. Firebug -> document.getElementById("1") 为空 2. 蜻蜓 -> 未捕获的异常:TypeError: Cannot convert 'document.getElementById("1")' to object

在 中的 hrefvalue() 中的第 8 行第 0 列抛出错误 文件://localhost/D:/Chicago%20pics/website%20pics/website%20root/trial5.htm: var newnew21 = document.getElementById("1").childNodes[0].getAttribute("href"); 从(事件)中的第 1 行第 0 列调用: hrefvalue() 再次感谢所有的鱼:D

【问题讨论】:

【参考方案1】:
    id 不能以数字开头(在 HTML 4 中)。不要押注支持此类 ID 的浏览器。 document.write 将删除未打开的文档。当浏览器解析&lt;/html&gt; 时,文档被关闭。由于该函数运行onclick,因此在您尝试编写之前将其关闭。使用DOM methods用JS修改HTML。

【讨论】:

那么为什么第一个有效? 我得到了 document.write(thishang) 的输出,但没有得到 newnew21 的输出。 因为在您调用document.write 第一次之前,您还没有销毁您尝试读取的元素之前 “ID 不能以数字开头” FWIW,曾经是真的in HTML4.01,现在仍然是真的@987654323 @,但是HTML5 now allows it。请注意,我不会将1 用作id。 (引用的页面根本没有指定任何文档类型,但是嘿。) @Quentin:恰恰相反,我很确定规范在这种情况下捕捉到了实际情况。 @downvoter:为什么要投反对票? Quentin 指出了代码的关键问题(#2),并警告用户不要采取可能会在某个时候咬到他/她的做法(#1)。

以上是关于document.getElementById 抛出 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

求教 document.getElementById 的用法

Chrome 中的 document.getElementById().innerText

打字稿中的 document.getElementById(s).document.getElementsByClassName 错误

为啥不需要 document.getElementById? [复制]

document.getElementById/Name/TagName

document.getElementById 与 jQuery $()