8

据我所知 document.getElementById('myId') 只会查找文档中已经存在的 HTML 元素。假设我通过 JS 创建了一个新元素,但是我还没有将它附加到文档正文中,有没有一种方法可以通过它的 id 访问这个元素,就像我通常使用 getElementById 所做的那样?

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

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

谢谢!

4

4 回答 4

5

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

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

于 2009-07-02T23:20:14.680 回答
4

对于在 2019 年或之后偶然发现此问题的任何人,这里有一个更新的答案。

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

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

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

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

var child2 = parent.querySelector("#my_id");
于 2019-12-16T14:48:56.817 回答
0

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

关于不存储参考,是吧?如果您可以通过 id 神奇地将其从空中拉出,那么空中将是对它的引用。

于 2009-07-02T23:13:44.740 回答
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);
}
于 2009-07-02T23:21:48.157 回答