Javascript 对DOM中[尚未]的元素使用getElementById?

Javascript 对DOM中[尚未]的元素使用getElementById?,javascript,getelementbyid,Javascript,Getelementbyid,据我所知,document.getElementById('myId')将只查找文档中已经存在的HTML元素。假设我已经通过JS创建了一个新元素,但是我还没有将它附加到文档正文中,有没有一种方法可以像通常使用getElementById一样通过它的id访问这个元素 var newElement = document.createElement('div'); newElement.id = 'myId'; // Without doing: document.body.appendChild(n

据我所知,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访问它)


谢谢大家!

getElementById是文档对象上的一个方法。它不会返回文档中没有的任何内容


不储存参考资料,嗯?如果您可以通过id神奇地将其从空中拉出,则air将是对它的引用。

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


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

如果已经创建了该元素,只需将该对象传递给其他函数并直接访问它即可

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

对于2019年或之后在这个问题上遇到困难的人,这里有一个更新的答案

Andrew Noyes接受的答案在该
文档中是正确的。getElementById
将不起作用,除非该元素存在于文档中,并且上述代码已经包含对所需元素的引用

但是,如果你不能直接检索你想要的元素,请考虑使用。选择器允许您检索纯粹存在于内存中的节点,例如:

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

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

var child2 = parent.querySelector("#my_id");

如果你已经创建了它,只需将对象传递给其他函数并直接访问它?@s_hewitt:这不适用于OP,但如果你像我一样,你不能“直接传递”,因为你缺少对它的引用。(您是使用innerHTML或某个库的等效项创建的。)在这种情况下,您试图获取引用,但getElementById位于错误的对象上,没有任何帮助。好的,谢谢!我认为通过执行document.createElement('div'),我的元素将以某种方式在列表或树中被引用,其中包含所有非附加元素。。。所以我想情况并非如此,我必须在没有身份证的情况下完成这项工作。