2012-03-28 76 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