Enlevez l'élément par son id

Lors de la suppression d'un élément avec JavaScript standard, vous devez vous présenter à ses parents d'abord:

var element = document.getElementById("element-id");
element.parentNode.removeChild(element);

Avoir à passer par le nœud parent du premier semble un peu étrange pour moi, est-ce une raison JavaScript fonctionne comme ceci?

  • Comme Jacques l'a dit, les DOM ne prend pas en charge la suppression d'un objet directement. Vous devez aller à son parent et de l'enlever de là. Javascript ne laissera pas un élément du suicide, mais il n'est permis de l'infanticide...
  • Jusqu'à présent, je sais, c'est la seule manière de croix-navigateur pour supprimer l'élément enfant si vous utilisez Javascript n'Bibliothèque Javascript.
  • Est-il une raison? Richard Feynman dit pas. (Bien que la justification technique est facile de voir si vous avez écrit des arbres de la structure des programmes. L'enfant doit informer le parent de toute façon, sinon la structure de l'arbre peut être rompu. Car il faut le faire en interne de toute façon, si il vous a fourni une ligne de la fonction, c'est juste une fonction pratique pour vous que vous pouvez définir vous-même.)
  • La seule raison que je vois est qu'il doit y avoir toujours un élément racine xml/document xhtml, donc vous ne serez pas en mesure de le supprimer car il n'a pas un parent
  • J'aime bien Johan de la solution, et je ne suis pas sûr de savoir pourquoi ces fonctions ne sont pas fournis en natif. Comme en témoigne le nombre de téléspectateurs, c'est une opération très courante.
  • Avez-vous dire que votre lien pour aller à "de Feynman: F***** aimants, comment fonctionnent-ils?" Parce que, euh, c'est là que ça, et je ne vois rien dans cette transcription sur les DOM et l'élément de suppression. (Ok, ok, j'ai obtenu ce que vous vouliez dire, mais le magnétisme est beaucoup moins une construction humaine de JavaScript, je crois, faire l'OP est question ici beaucoup plus viable que celle de l'enquêteur. ;^D cela dit, il est vrai, IANAP[hysicist].)
  • Eh bien, vous kinda faut le lire pour obtenir le point. Mais fondamentalement, c'est de répondre à la "semble un peu bizarre" partie. Aucune "raison", serait également "semble un peu bizarre". Parfois, le monde est juste la façon dont il est. Et de la "raison technique" est l'arbre-structure des trucs, mais je pense que ça n'aurait pas été une réponse intuitive ainsi alors mettez entre parenthèses dans un commentaire)
  • Mon humble avis: La raison pour laquelle c'est le même que celui que j'ai vu dans d'autres environnements: Vous effectuez une action basée sur votre "lien" à quelque chose. Vous ne pouvez pas le supprimer alors que vous êtes lié. Comme la coupe d'une branche d'arbre. S'asseoir sur le côté le plus proche de l'arbre lors de la coupe ou le résultat sera ... malheureux (mais drôle).
  • Vous pouvez utiliser element.remove() directement de l'ES5. Vous n'avez pas besoin du parent!
  • c'est prolicide, pas un infanticide, et en aparté, Javascript ne permet parricide par les grands-parents. 🔪
  • Cela fonctionne, une fois. J'ai un bouton qui crée l'élément que je veux, puis un evenListener qui écoute, cliquez sur un autre élément, et déclenche une fonction avec ce code (j'ai aussi essayé node.remove();). Avec les deux extraits, il fonctionne de la première fois, mais la deuxième fois, j'obtiens l'erreur suivante: Uncaught TypeError: Cannot read property 'remove' of null sur la première ligne de l'erreur, puis at removeElement (script.js:23) sur la deuxième ligne de l'erreur puis at HTMLDivElement.document.getElementById.addEventListener (script.js:36) sur la dernière ligne de l'erreur.
  • Ainsi, le navigateur soudainement renvoie "HTMLDivElement" (objet) au lieu de "elemID" la deuxième fois autour. Toute idée de ce qui se passe?

InformationsquelleAutor Zaz | 2010-08-01