8
votes

Utilisez GetElementyID pour des éléments qui ne sont pas [encore] dans le DOM?

Aussi loin que je connaisse document.getElementyID ('myid') recherchera uniquement des éléments HTML déjà dans le document. Disons que j'ai créé un nouvel élément via JS, mais que je ne l'ai pas encore ajouté à l'organisme du document, est-il possible d'accéder à cet élément par son identifiant comme je le ferais normalement avec GetElementyID?

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


2 commentaires

Si vous avez créé cela, passez simplement l'objet à d'autres fonctions et y accéder directement?


@s_hewitt: Cela ne s'applique pas à l'OP, mais si vous êtes comme moi, vous ne pouvez pas "le transmettre" parce que vous n'avez pas de référence. (Vous avez créé-le à l'aide d'un équivalent de la bibliothèque innerhtml ou de la bibliothèque.) Dans ce cas, vous essayez d'obtenir une référence, mais GetElementyID est localisé inutilement sur le mauvais objet.


4 Réponses :


0
votes

GetElementyID est une méthode sur l'objet Document. Cela ne retournera rien dans le document.

sur ne pas stocker une référence, hein? Si vous pouviez le tirer comme par magie de l'air par ID, l'air serait une référence à celle-ci.


0 commentaires

5
votes

Si cela ne fait pas partie du document, vous ne pouvez pas l'accrocher à l'aide de document.getelementByID . GetElementByID Est-ce que l'élément doit être trouvé dans l'arborescence. Si vous créez un élément DOM flottant, il existe simplement en mémoire et n'est pas accessible depuis le DOM. Il doit être ajouté à la DOM pour être visible.

Si vous devez faire référence à l'élément ultérieurement, passez simplement la référence à une autre fonction - Tous les objets de JavaScript sont passés par référence, alors que vous travaillez sur cet élément DOM flottant à partir d'une autre fonction modifie l'original, pas une copie. < / p>


1 commentaires

Ok, merci tout! Je pense que, en faisant un document.createeelement («div»), mon élément serait en quelque sorte référencé dans une liste ou une arborescence, avec tous les éléments non annexés ... Donc, je suppose que ce n'est pas le cas et que je devrais avoir à Faites cela sans identifiant.



0
votes

Si vous avez créé cela, passez simplement l'objet à d'autres fonctions et y accéder directement? XXX


0 commentaires

4
votes

Pour que quiconque trébuche sur cette question à ou après 2019, voici une réponse mise à jour.

La réponse acceptée d'Andrew Noyes est correcte dans ce document.getelementByID code> ne fonctionnera pas à moins que l'élément existe dans le document et le code ci-dessus contient déjà une référence à l'élément souhaité de toute façon. P>

Toutefois, si vous ne pouvez pas extraire une référence directe à votre élément désiré, envisagez d'utiliser Sélectors . Les sélecteurs vous permettent de récupérer des nœuds qui existent purement en mémoire, par exemple: P>

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

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

var child2 = parent.querySelector("#my_id");


0 commentaires