2009-07-02 5 views
5

Soweit ich weiß, wird document.getElementById ('myId') nur nach HTML-Elementen suchen, die sich bereits im Dokument befinden. Nehmen wir an, ich habe ein neues Element über JS erstellt, aber ich habe es noch nicht an den Dokumentkörper angehängt. Gibt es eine Möglichkeit, auf dieses Element mit seiner ID zuzugreifen, wie ich es normalerweise mit getElementById tun würde?Verwenden Sie getElementById für Elemente, die [noch] nicht im DOM enthalten sind?

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

Gibt es einen Workaround dafür? (Ich muss sagen, dass ich keine Bezugnahme auf dieses bestimmte Element speichern möchte, deshalb muss ich darauf über seine Id zugreifen)

Vielen Dank!

+0

Wenn Sie es erstellt haben, nur übergeben Sie das Objekt an andere Funktionen und greifen Sie direkt darauf zu? –

+0

@s_hewitt: Dies gilt nicht für das OP, aber wenn Sie wie ich sind, können Sie es nicht "einfach weitergeben", weil Ihnen der Verweis darauf fehlt. (Sie haben es mit innerHTML oder dem Äquivalent einer Bibliothek erstellt.) In diesem Fall versuchen Sie, eine Referenz zu erhalten, aber getElementById ist nicht hilfreich am falschen Objekt. – Thanatos

Antwort

5

Wenn es nicht Teil des Dokuments ist, können Sie es nicht mit document.getElementById greifen. getElementById macht eine DOM-Suche, so dass das Element in der Struktur gefunden werden muss. Wenn Sie ein Floating-DOM-Element erstellen, ist es nur im Speicher vorhanden und kann nicht vom DOM aus aufgerufen werden. Es muss dem DOM hinzugefügt werden, um sichtbar zu sein.

Wenn Sie später auf das Element verweisen müssen, übergeben Sie einfach den Verweis auf eine andere Funktion. Alle Objekte in JavaScript werden als Referenz übergeben. Wenn Sie also an diesem schwebenden DOM-Element innerhalb einer anderen Funktion arbeiten, wird das Original und keine Kopie geändert.

+0

OK, danke alles! Wenn ich ein document.createElement ('div') mache, würde mein Element irgendwie in einer Liste oder einem Baum mit allen nicht angehängten Elementen referenziert ... Also ich denke, das ist nicht der Fall und das muss ich mach das ohne IDs. –

0

getElementById ist eine Methode für das Dokumentobjekt. Es wird nichts zurückgeben, was nicht im Dokument enthalten ist.

Nicht auf eine Referenz speichern, nicht wahr? Wenn du es magisch aus der Luft ziehen könntest, wäre die Luft ein Hinweis darauf.

0

Wenn Sie es erstellt haben, nur übergeben Sie das Objekt an andere Funktionen und greifen Sie direkt darauf zu?

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); 
}