getElementById завершается ошибкой с очень конкретным идентификатором, который определенно находится в дереве DOM в IE 11, возможно, Edge - почему? - PullRequest
0 голосов
/ 15 ноября 2018

В Microsoft IE и (согласно комментариям) Edge, getElementById() для идентификатора, который является "extTabsBodyEleFile1273551781_renderTo", завершается неудачей.

<!DOCTYPE HTML>
<html>
    <body>
        <div id="extTabsBodyEleFile1273551781_renderTo"></div>
    </body>
</html>

Этот идентификатор был создан автоматически.Любое изменение идентификатора устраняет проблему.Получение родительского элемента div и перечисление его дочерних узлов также включает в себя div.

Ошибка может быть воспроизведена как в IE 11.0.9600.19155, так и в 11.0.9600.18538, но она работает на другом компьютере с IE 11 ... 19155 без проблем.

Ошибка также может быть воспроизведена, если вы откроете консоль разработчика на случайном сайте, измените идентификатор любого элемента в DOM-обозревателе на идентификатор выше и затем попытаетесь получить этот элемент с помощью document.getElementById('extTabsBodyEleFile1273551781_renderTo')

Я понимаю, что это ошибка Edge, и ее исправление будет означать изменение ID.У меня вопрос, почему это происходит, почему это не произошло в одном экземпляре Edge (я не смог найти различия настроек) и как я мог сгенерировать ID, чтобы это больше не повторилось.Это легко изменить в этом месте, но, не зная, почему это произошло, это может произойти снова.

Существует ли известная комбинация хешей или чисел, которую ID не должен иметь?Это устаревшая настройка, которую я мог бы потенциально отключить с помощью мета-тегов?

Надеюсь, этот вопрос не слишком специфичен для SO - его поиск оказался бесплодным из-за множества вопросов, связанных с getElementById.

console.log(document.getElementById('extTabsBodyEleFile1273551781_renderTo'));
<div id="extTabsBodyEleFile1273551781_renderTo"></div>

Обновление:

Кажется, что ID не работает в случае, не учитывающем регистр:

extTabsBodyEleFile1273551781_renderTo
exttabsbodyelefile1273551781_renderto
EXTTABSBODYELEFILE1273551781_RENDERTO
ExttAbsbOdyELEfILE1273551781_rEndErtO

Всевызвать ошибку.


Обновление:

IE-консоль разработчика, по крайней мере, связана с ошибкой.Открытие тестовой HTML-страницы, которая отображает результат попытки извлечь Элемент по этому идентификатору внутри себя, а не регистрировать его на консоли, работает, как и ожидалось, если 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();
        testresults.innerHTML = "<h3>testresults:</h3><br><table><tr><th>ID</th><th>Result</th><th>Time</th></tr>" +
        '<tr><td>extTabsBodyEleFile1273551781_renderTo: ' + "</td><td>" + document.getElementById('extTabsBodyEleFile1273551781_renderTo') + "</td><td>" + time + "</td></tr>" +
        '<tr><td>extTabsBodyEleFile1273551781_renderTo through querySelector: ' + "</td><td>" + document.querySelector('*[id="extTabsBodyEleFile1273551781_renderTo"]') + "</td><td>" + time + "</td></tr>" +
        '</table>';
        </script>
    </body>
</html>

1 Ответ

0 голосов
/ 15 ноября 2018

TL; DR

Похоже, что определенные строки возвращают ноль, если вы пытаетесь выбрать их, я обнаружил 3 строки, которые нельзя выбрать в этой скрипке: https://jsfiddle.net/cogwrudx/4/

Я провел тесты с 1273 до 1290 идентификаторов и нашел только 3, но я думаю, что их может быть больше, я не знаю, почему эти строки настолько важны, что edge не позволяет искатьдля них.

Происхождение

Я не могу комментировать, но это действительно раздражало меня, поэтому мне пришлось провести еще несколько тестов, и похоже, что неважно, какие изменениявы сделаете, чтобы эта строка работала, но она НЕ будет работать для этой точной строки.

Добавление / удаление любой буквы / цифры будет работать.Изменение последнего числа перед подчеркиванием на 2 вместо 1 также будет работать.На самом деле замена любого числа на другое работает.

Похоже, ребро не нравится эта конкретная строка по причине, и я действительно хочу знать, почему.

РЕДАКТИРОВАТЬ 1

После более простого тестирования я запустил следующую скрипку: https://jsfiddle.net/cogwrudx/4/

Как вы можете видеть после запуска и просмотра консоли, есть еще 2 идентификатора, которые он не делает.'находят:

not found:  extTabsBodyEleFile1273351781_renderTo
not found:  extTabsBodyEleFile1273451781_renderTo
not found:  extTabsBodyEleFile1273551781_renderTo

Так что из этого я думаю, что нет очевидного шаблона, которого следует избегать, как предлагали другие, но есть очень конкретные строки для поиска, как будто вы пытаетесь установить те же строки, что и классыне будет работать так же.

К вашему сведению

Я тестировал это в браузере Edge в Windows 10, а не в IE11.

Microsoft Edge 42.17134.1.0
Microsoft EdgeHTML 17.17134 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...