2012-03-28 69 views
11

我在运行时使用innerHTML标记创建了一个对象,现在我想通过使用getElementById访问此元素,当我访问元素时它的返回NULL值。请给我建议任何方向,这样我可以达致这,getElementById其中元素是在运行时动态创建的

这里是我使用

在HTML

<div id="web"> 
<object id="test"></object> 
</div> 

在JS

document.getElementById("web").innerHTML="<object id='test2'></object>"; 
. 
. 
var obj = document.getElementById("test2"); 

这里的obj下面的代码提示返回空值。

+3

某些代码片段会有帮助。 – Sirko 2012-03-28 07:18:37

+0

请使用jsFiddle.net – 2012-03-28 07:21:30

+0

尝试使用代码段从[这里] [1] [1]:http://stackoverflow.com/questions/343145/does-getelementbyid-work-on-elements创建的javascript – Elena 2012-03-28 07:21:47

回答

12

您是否为新创建的元素分配了ID?您是否将元素插入文档树中(使用appendChildinsertBefore)?只要该元素没有插入到DOM中,就无法使用document.getElementById进行检索。元素创建的

例子:

var myDiv = document.createElement('div'); 
myDiv.id = 'myDiv'; 
document.body.appendChild(myDiv); 
document.getElementById('myDiv').innerHTML = 'this should have worked...'; 

[编辑]考虑到以后提供的代码,第三个问题出现了:是你的脚本位于HTML页面的底部(右收盘</body>标记之前)?如果它位于文档的标题中,则可以在之前运行脚本,完成文档树的渲染。如果你的脚本必须是在文档的标题,你可以使用负载处理后渲染的文件来运行它

window.onload = function(){ 
    document.getElementById("web").innerHTML='<object id="test2"></object>'; 
    // [...] 
    var obj = document.getElementById('test2'); 
}; 
1

要使用JavaScript添加元素,你需要做两件事情。

  1. 创建元件

    变种元素=使用document.createElement(标签名);

  2. 它添加到DOM

    document.body.insertBefore(选择器,元件);

document.getElementByID(selector).appendChild(element); 

此处了解详情:MDN

-2

如果是动态创建一个DOM节点,那么就没有必要EVER与document.getElementById()再次找到它。

通过以正确的方式创建节点,您可以将其引用为一个JavaScript变量,它可以在范围内的任何位置使用。

例如:

window.onload = function(){ 
    var myDiv = document.createElement('div'); 
    document.body.appendChild(myDiv); 

    //and now a function that's called in response to some future event 
    function whatever(){ 
     ... 
     myDiv.style.color = 'red'; 
     ... 
    } 
}; 

注:内部函数(称为在某些点(一个或多个)将来)有权访问myDiv变量,因为外部函数形成“闭合”,在其内部变量保持即使外部函数已经完成并返回,仍然可用且可访问。

+0

嘿@甜菜根 - 甜菜根,...我认为如果新创建的元素被创建,但是我们不知道参考变量,这将是一个麻烦。无论如何,如何实现getElementById()?任何第三方注射或东西.... – gumuruh 2016-07-16 20:34:04

+0

这不会回答这个问题。最好不要假设他们的代码基础。该元素的创建可能位于代码库的一部分,该元素不能被抓取元素的部分访问。即使可访问,请考虑其他参与此问题的人员寻找所问问题的答案,而不是针对此特定人员的解决方法。 – Variadicism 2016-10-11 16:34:25