Использовать getElementById для элементов, которых [еще] нет в DOM?

StackOverflow https://stackoverflow.com/questions/1077139

  •  21-08-2019
  •  | 
  •  

Вопрос

Насколько я знаю, document.getElementById('myId') будет искать только элементы HTML, которые уже есть в документе.Допустим, я создал новый элемент через JS, но еще не добавил его в тело документа. Есть ли способ получить доступ к этому элементу по его идентификатору, как я обычно делаю с getElementById?

var newElement = document.createElement('div');
newElement.id = 'myId';
// Without doing: document.body.appendChild(newElement);
var elmt = document.getElementById('myId'); // won't work

Есть ли обходной путь для этого?(Должен сказать, что я не хочу хранить какую-либо ссылку на этот конкретный элемент, поэтому мне нужно получить к нему доступ через его идентификатор)

Спасибо!

Это было полезно?

Решение

Если он не является частью документа, вы не сможете получить его, используя document.getElementById. getElementById выполняет поиск в DOM, поэтому элемент должен находиться в дереве, чтобы его можно было найти.Если вы создаете плавающий элемент DOM, он просто существует в памяти и недоступен из DOM.Чтобы его можно было увидеть, его необходимо добавить в DOM.

Если вам понадобится сослаться на элемент позже, просто передайте ссылку на другую функцию — все объекты в JavaScript передаются по ссылке, поэтому работа с этим плавающим элементом DOM из другой функции изменяет оригинал, а не копию.

Другие советы

getElementById — это метод объекта документа.Он не вернет ничего, чего нет в документе.

О том, что не хранишь ссылку, да?Если бы вы могли волшебным образом вытащить его из воздуха по id, то воздух был бы ссылкой на него.

Если вы его создали, просто передайте объект другим функциям и получите к нему прямой доступ?

function createDiv()
{
  var newElement = document.createElement('div');
  doWorkWithDiv(newElement);
}

function doWorkWithDiv(element)
{
  element.className = 'newElementCSS';
  element.innerHTML = 'Text inside newElement';
  addToDoc(element);
}

function addToDoc(element)
{
  document.body.appendChild(element);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top