将getElementById用于DOM中尚未[还]的元素吗?

问题描述 投票:6回答:4

据我所知document.getElementById('myId')将仅查找文档中已经存在的HTML元素。假设我已经通过JS创建了一个新元素,但是还没有将其添加到文档主体中,有没有一种方法可以像我通常使用getElementById一样通过其id访问该元素?

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

是否有解决方法?(我必须告诉我,我不想存储对该特定元素的任何引用,这就是为什么我需要通过其ID访问它的原因)

谢谢!

javascript getelementbyid
4个回答
5
投票

如果它不是文档的一部分,则无法使用document.getElementById来获取它。 getElementById执行DOM查找,因此元素必须在树中才能找到。如果创建浮动DOM元素,则它仅存在于内存中,并且无法从DOM访问。必须将其添加到DOM中才能显示。

[如果以后需要引用该元素,只需将引用传递给另一个函数-JavaScript中的所有对象都通过引用传递,因此从另一个函数中处理该浮动DOM元素会修改原始的,而不是副本。


0
投票

getElementById是文档对象上的方法。它不会返回文档中未包含的任何内容。

不存储参考文献,是吗?如果您可以通过id将其神奇地拔出,那么空中将是对它的引用。


0
投票

如果创建了它,只需将对象传递给其他函数并直接访问它?

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);
}

0
投票

对于在2019年或之后遇到此问题的人,这里是更新的答案。

Andrew Noyes接受的答案是正确的,因为document.getElementById除非文档中存在该元素并且上述代码已经包含对所需元素的引用,否则它是行不通的。

但是,如果无法以其他方式获取对所需元素的直接引用,请考虑使用selectors。选择器使您可以检索纯粹存在于内存中的节点,例如:

var child = document.createElement("div");
child.id = "my_id";

var parent = document.createElement("div");
parent.appendChild(child);

var child2 = parent.querySelector("#my_id");
© www.soinside.com 2019 - 2024. All rights reserved.