在Microsoft IE和(根据评论)Edge,getElementById()在一个ID正好"extTabsBodyEleFile1273551781_renderTo"失败.
<!DOCTYPE HTML>
<html>
<body>
<div id="extTabsBodyEleFile1273551781_renderTo"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
此ID已自动生成.以任何方式更改ID可以解决问题.获取div的父级并列出其子节点还包括div.
错误可以在IE 11.0.9600.19155和11.0.9600.18538上重现 - 但它在IE 11 ... 19155的另一台机器上运行没有问题.
如果您在随机站点上打开开发人员控制台,将DOM浏览器中任何元素的ID更改为上面的ID,然后尝试通过以下方式获取该元素,也可以重现该错误 document.getElementById('extTabsBodyEleFile1273551781_renderTo')
我意识到这是一个Edge bug并且修复它只是意味着更改ID.我的问题是它为什么会发生,为什么它没有发生在Edge的一个实例上(我找不到设置差异)以及我如何生成ID以确保它不会再次发生.在这个地方很容易改变它,但不知道它为什么会发生,它可能会再次发生.
是否有已知的哈希或数字组合ID不应该有?这是我可能使用元标记关闭的遗留设置吗?
我希望这个问题对于SO来说并不太具体 - 由于getElementById相关问题的大量搜索,它被证明是徒劳的.
console.log(document.getElementById('extTabsBodyEleFile1273551781_renderTo'));Run Code Online (Sandbox Code Playgroud)
<div id="extTabsBodyEleFile1273551781_renderTo"></div>Run Code Online (Sandbox Code Playgroud)
更新:
似乎ID在不区分大小写的情况下失败:
extTabsBodyEleFile1273551781_renderTo
exttabsbodyelefile1273551781_renderto
EXTTABSBODYELEFILE1273551781_RENDERTO
ExttAbsbOdyELEfILE1273551781_rEndErtO
Run Code Online (Sandbox Code Playgroud)
都导致错误.
更新:
IE Developer控制台似乎至少参与了错误.打开一个测试HTML页面,显示尝试通过该ID内部检索元素而不是将其记录到控制台的结果,如果在控制台关闭的情况下启动IE,则按预期工作 - 直到控制台打开并且页面刷新了一对(1-5)次,然后错误再次出现并持续到IE关闭并重新打开.出现错误后关闭开发人员控制台似乎没有效果.
测试HTML托管在netlify,HTML代码:
<!DOCTYPE HTML>
<html>
<head>
<style>
table, th, td {border: 1px solid black;border-collapse: collapse;}
th, td {padding: 15px;}
</style>
</head>
<body>
<div id="extTabsBodyEleFile1273551781_renderTo"></div>
<div><p id="testresult"></p></div>
<script>
var testresults = document.getElementById('testresult');
var time = new Date().getTime(); …Run Code Online (Sandbox Code Playgroud) javascript getelementbyid internet-explorer-11 microsoft-edge