小编Kad*_*ser的帖子

getElementById在IE 11上的DOM树中确定的非常具体的ID上失败,可能是Edge - 为什么?

在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

21
推荐指数
1
解决办法
471
查看次数