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, puisat removeElement (script.js:23)
sur la deuxième ligne de l'erreur puisat 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?
Vous devez vous connecter pour publier un commentaire.
Je sais qu'en augmentant les natifs de DOM fonctions n'est pas toujours la meilleure ou la plus populaire de la solution, mais cela fonctionne très bien pour les navigateurs modernes.
Et puis vous pouvez supprimer des éléments comme cette
ou
Remarque: cette solution ne fonctionne pas pour IE 7 et ci-dessous. Pour plus d'informations sur l'extension de la DOM lire ce l'article.
MODIFIER: l'Examen de ma réponse en 2019,
node.remove()
est venu à la rescousse et peut être utilisé comme suit (sans le polyfill ci-dessus):ou
Ces fonctions sont disponibles dans tous les navigateurs modernes (pas internet explorer). Lire plus sur MDN.
NodeList
ouHTMLCollection
qui sont array ensemble d'éléments. La deuxième définition de la méthode permet de ces "ensembles d'éléments" à être supprimé.document.getElementsByClassName("my-elements").remove();
. Edit: en fait il supprime un tas, mais nécessite de re-courir à la fin. Essayez sur cette page avec la classe "comment-copy".while(this.length){ this[0].parentElement.removeChild(this[0]); }
?if(this[i] && this[i].parentElement)
pour être sûr que l'élément courant existe toujours et a un élément parent, sinon vous risquez d'obtenir des erreurs de levée des éléments imbriqués, etc.Crossbrowser et IE >= 11:
$.ready
js alternative ànoscript
balises. Afin de l'utiliser comme je le souhaitais, j'ai eu l'envelopper dans un 1mssetTimeout
fonction. Cela résout tous mes problèmes à la fois. Gracias.outerHTML
est encore une nouvelle(er) plus de la norme. Si vous êtes à la recherche de l'aide sur un logiciel >6 au moment de la rédaction, vous aurez besoin d'une autre solution. Leremove
fonction mentionné par d'autres, est un cas similaire. Comme d'habitude, il est sûr de mettre en œuvre un polyfill.delete element
ne fait rien que vous ne pouvez pas supprimer les variables en JS, seules les touches 😉 Vérifiez par vous-même, il ne fonctionne pas parconsole.log(element)
aprèsdelete element
...removeChild
(environ 6-7% sur mon système). Voir jsperf.com/clear-outerhtml-v-removechild/2Vous pourriez faire un
remove
fonction de sorte que vous ne voudriez pas avoir à y penser à chaque fois:elem
àremove.elem
. De cette façon, les références de fonction elle-même, de sorte que vous n'avez pas à créer une autre variable globale. 🙂function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
C'est ce que le DOM prend en charge. De recherche de la page pour "supprimer" ou "supprimer" et removeChild est le seul qui supprime un nœud.
element.remove();
fonctionne. C'est peut-être quelque chose de nouveau. Mais la première fois pour moi et ça fonctionne. Je pense qu'il doit avoir travaillé toujours que c'est très basique doit avoir des choses.Le DOM est organisé en une arborescence de nœuds, où chaque nœud a une valeur, avec une liste de références à ses nœuds enfants. Donc
element.parentNode.removeChild(element)
imite exactement ce qui se passe à l'intérieur: d'Abord, vous allez le le nœud parent, puis de supprimer la référence à l'enfant du nœud.De DOM4, une fonction d'assistance est fourni pour faire la même chose: élément
.remove()
. Cette fonctionne dans 87% des navigateurs (dès 2016), mais pas IE 11. Si vous avez besoin de soutenir les anciens navigateurs, vous pouvez:Pour supprimer un élément:
Pour supprimer tous les éléments avec, par exemple, un certain nom de la classe:
if(list[i] && list[i].parentElement)
ligne nécessaire? N'est-ce pas l'existence de chaque élément garanti par le fait qu'elle a été renvoyée par legetElementsByClassName
méthode?document.getElementsByClassName(...
Elements
au lieu deElement
. Je vous remercie.vous pouvez simplement utiliser
element.remove()
element.remove()
n'est pas du JavaScript valide et ne fonctionne que dans certains navigateurs tels que Chrome.element.remove()
est JavaScript valide avec DOM4, et fonctionne dans tous les navigateurs modernes, naturellement, à l'exception d'Internet Explorer.La
ChildNode.remove()
méthode supprime l'objet de l'arbre auquel il appartient.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Ici est un violon qui montre comment vous pouvez appeler
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
**
Il n'est pas nécessaire d'étendre NodeList. Il a été mis en place déjà.
**
Le nom de la fonction est
removeChild()
, et comment est-il possible de retirer l'enfant quand il n'y a pas de parent? 🙂D'autre part, vous n'avez pas toujours l'appeler comme vous l'avez montré.
element.parentNode
est seulement une aide pour obtenir le nœud parent du nœud donné. Si vous connaissez déjà le nœud parent, vous pouvez simplement l'utiliser comme ceci:Ex:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
=========================================================
Ajouter quelque chose de plus:
Certaines réponses ont souligné qu'au lieu d'utiliser
parentNode.removeChild(child);
, vous pouvez utiliserelem.remove();
. Mais comme je l'ai remarqué, il y a une différence entre les deux fonctions, et il n'est pas mentionné dans les réponses.Si vous utilisez
removeChild()
, il sera de retour une référence pour le nœud supprimé.Mais si vous utilisez
elem.remove();
, il ne reviendra pas vous le référence.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Ce comportement peut être observé dans Chrome et FF. Je crois qu'Il est intéressant de remarquer 🙂
Espère que ma réponse ajoute de la valeur à la question et sera utile!!
Fonctions qui utilisent ele.parentNode.removeChild(ele) ne fonctionne pas pour les éléments que vous avez créés, mais pas encore inséré dans le HTML. Les bibliothèques comme jQuery et Prototype judicieusement utiliser une méthode comme suit pour échapper à cette limitation.
Je pense que le JavaScript fonctionne comme ça, parce que le DOM d'origine de designers tenue parent/enfant et précédent/suivant de la navigation comme une priorité plus élevée que le DHTML modifications qui sont si populaires aujourd'hui. Être capable de lire à partir d'un <input type= "texte" > et d'écriture à l'autre par la position relative dans les DOM a été utile dans le milieu des années 90, une époque où la génération dynamique de l'ensemble des formulaires HTML ou interactive des éléments d'interface a été à peine une étincelle dans certains développeur de l'œil.
Selon DOM de niveau 4 spécifications, qui est la version en cours de développement, il y a quelques nouvelle pratique de la mutation des méthodes disponibles:
append()
,prepend()
,before()
,after()
,replace()
, etremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
Vous pouvez directement supprimer cet élément en utilisant
remove()
méthode de DOM.voici un exemple:
À 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 couper 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).
Ce qu'en réalité on vient de FireFox... pour une fois, c'est à dire a été en tête du peloton et a permis la suppression d'un élément directement.
C'est juste mon hypothèse, mais je crois que la raison pour laquelle vous devez retirer un enfant par le parent est en raison d'un problème avec la façon dont FireFox a géré la référence.
Si vous appelez d'un objet pour commettre hari-kari directement, puis immédiatement après, il meurt, vous êtes tenant toujours que la référence à elle. Cela a le potentiel de créer plusieurs méchants bugs... comme ne pas le supprimer, en les supprimant, mais en gardant les références à ce qui semble valide, ou tout simplement une fuite de mémoire.
Je crois que quand ils ont réalisé la question, le travail autour de a été de supprimer un élément par le biais de sa société mère, parce que lorsque l'élément est parti, vous êtes maintenant en tenant simplement une référence à la société mère. Ce qui n'empêchera pas tous que des désagréments, et (si la fermeture d'un arbre de nœud en nœud, par exemple) aurait 'zip-up" plutôt bien.
Il devrait être facile à corriger un bug, mais comme beaucoup d'autres choses dans la programmation web, le communiqué de presse a probablement précipité, conduisant à ce... et par le temps, la prochaine version est venu autour, assez de gens ont été en utilisant ce que la modification de cette conduirait à la rupture d'un tas de code.
Encore une fois, tout cela est tout simplement ma conjecture.
Je ne, cependant, attendent avec impatience le jour lors de la programmation web obtient finalement un plein nettoyage de printemps, tous ces étranges petits idiosynchracies obtenir nettoyé, et tout le monde commence à jouer selon les mêmes règles.
Probablement le lendemain de mon robot serviteur poursuit-moi pour les salaires.
removeChild
est une méthode de la DOM Niveau 1Node
interface.De ce que je comprends, la suppression d'un nœud directement ne fonctionne pas dans Firefox, Internet Explorer uniquement. Ainsi, à l'appui de Firefox, vous devez vous rendre à la mère de le retirer de l'enfant.
Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
C'est la meilleure fonction pour supprimer un élément, sans erreur de script:
Note de
EObj=document.getElementById(EId)
.C'est UN signe égal pas
==
.si l'élément
EId
existe alors la fonction supprime, sinon elle retourne false, et paserror
.