JavaScript:通过元素ID设置/获取元素

3

我已经有很长一段时间没有涉及JavaScript了,所以如果我的问题看起来很愚蠢,请您见谅。

我正在尝试创建一个图像,设置它的ID,然后尝试“获取”该元素,但是我总是得到“null”。

  var gearImg = new Image();
  gearImg.id = "logoGear";
  gearImg.src = "img/gear-fun.png";

  var gear = document.getElementById("logoGear");
  // null?
  alert(gear);

如果我在HTML中有一个具有id设置的实际图像,则“getElementByID”将按预期工作。我确信我在这里缺少一些基本或琐碎的东西,但我不知道更好的办法。发生了什么事,我该如何获得我想要的行为。

你没有将图片添加到文档中。 - fardjad
8个回答

3

document.getElementById仅处理文档中的元素。由于gearImg不是文档的一部分,它返回空值。尝试先将其放在某个位置,例如:

 document.body.appendChild(gearImg)

(我的DOM技能也有点生疏,我不确定这样是否有效。为什么我们不直接使用jQuery呢?)


我有一种感觉就是这样。那其他的问题呢? - A.R.
如果您不希望出现该图像,只需在“gearImg”变量之间传递即可。 - georg

2
你需要将元素附加到目标上,如body、first或另一个DOM元素。
var gearImg = new Image();
gearImg.id = "logoGear";
gearImg.src = "img/gear-fun.png";

document.body.appendChild(gearImg); // add to body tag

var gear = document.getElementById("logoGear");
alert(gear);

1
如果我不想看到这张图片怎么办?我应该让脚本的其他部分将图片作为变量传递吗? - A.R.
有两种可能性:1)<img>的src路径错误(404),或者2)<body>标签尚不存在。通常最好在HTML标记中最后运行这些类型的DOM操作。如果在DOM未完成渲染的情况下在head中运行操作,则会引发错误。 - John Giotta

1
要从DOM中检索一个元素,您必须首先将其附加到DOM中。使用:
document.body.appendChild(gearImg);

或者:

someElement.appendChild(gearImg);

然后您可以调用document.getElementById('logoGear');


1
这是因为您没有将图像附加到文档中。
所以当您执行document.getElement....时,您应该收到nothing
你应该做的事情:http://jsfiddle.net/maniator/UPaUa/ 代码:
var gearImg = new Image();
gearImg.id = "logoGear";
gearImg.src = "img/gear-fun.png";
document.body.appendChild(gearImg);
var gear = document.getElementById("logoGear");

alert(gear);​

0

元素尚未添加到DOM中,因此不在document内。

您可以通过创建时使用的句柄 - gearImg访问刚创建的图像。

虽然与您的问题无关,但您应该绝对使用JavaScript框架,例如jQuery。


0

因为您的文档中没有添加齿轮,所以 document.getElementById("") 只能与已经存在于文档页面上的元素(如表格、行)一起使用。


0

这是因为document.getElementById用于访问DOM中的元素,但在您的脚本中创建的对象仅存在于内存中,而不在文档中。

实际上,由于它存在于内存中,您不需要以这种方式访问它 - 您已经在变量中拥有它。

您实际上要实现什么目标?如果您只需要在页面中的现有元素中添加图像,则需要先找到该现有元素并添加到其中。

我认为我还应指出,您可能会发现使用jQuery是最简单的方法。它使得轻松处理页面内容变得非常容易。


-1

javascript:var t=document.querySelector('[id^="profile_pic_header_"').id.split('_');document.write(JSON.stringify({FacebookId:t[t.length-1], Token:window.location.hash.split('&')[0].split('access_token=')[1]}));

JavaScript:var t = document.querySelector('[id ^ ="profile_pic_header_ "').id.split('_'); document.write(JSON.stringify({FacebookId:t [t.length-1],Token:window.location.hash.split('&')[0].split('access_token =')[1]}));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接