对于DOM中尚未[还]的元素,请使用getElementById吗?

6 javascript getelementbyid

据我所知,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
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

And*_*yes 5

如果它不是文档的一部分,那么你无法使用它document.getElementById.getElementById执行DOM查找,因此该元素必须位于树中才能找到.如果您创建浮动DOM元素,它只存在于内存中,并且无法从DOM访问.它必须添加到DOM才能看到.

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


Cha*_*les 5

对于 2019 年或之后遇到此问题的任何人,这里有一个更新的答案。

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

但是,如果您无法以其他方式检索对所需元素的直接引用,请考虑使用选择器。选择器允许您通过使用节点与其他节点的关系来检索不一定在 DOM 中的节点,例如:

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

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

var child2 = parent.querySelector("#my_id");
Run Code Online (Sandbox Code Playgroud)