IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Supprimer un élément ?


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut Supprimer un élément ?
    Bonjour à tous, et merci ça ceux ceux qui pourront prendre 1 petite minute pour me conseiller la meilleure pratique en la matière.

    Voila : Je cherche à supprimer un élément dont j'ai la référence, et dont je sais uniquement qu'il est le dernier Enfant de son div parent

    • Pour cela j'ai envisagé la mise en place d'un prototype .remove() sur les éléments, qui utiliserait .parentNode et .removeChild
    • J'ai aussi découvert que la méthode existerait déjà sur certains navigateurs, que ce passe t-il si je créé un prototype portant le même nom ? il supprimer l'implémentation de base ?
    • J'ai enfin pensé à un OuterHTML="" sur l’élément à supprimer, mais cela ne laisse t'il pas un nœud vide dans la structure du document ? C'est pourtant la solution qui me semble la plus économique en ressources...

    Merci par avance

    PS : Je sais que mon titre n'est pas optimisé, il semble impossible de le modifier une fois le sujet lancé... désolé..

  2. #2
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    testé sur la page du forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    d = document.getElementById("offresdvp");
    d.lastChild.remove();
    Attention de tester que d existe et qu'il a bien un fils avant d'appeler remove ou alors faire ça dans un try catch

    A+JYT

  3. #3
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    La méthode est élégante, mais niveau compatibilité, je pense qu'il est préférable de passer par un bon vieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var d = document.getElementById("offresdvp");
    d.parentNode.removeElement(d);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 183
    Par défaut
    Mais messieurs, auriez vous oublié le JS, c'est removeChild

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    d.parentNode.removeChild(d);

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Au temps pour moi, j'ai écrit un peu trop rapidement removeElement() au lieu de removeChild()...

    Cependant, ta remarque ne s'applique pas à la proposition de sekaijin : Des nouveautés dans l'interface Element du DOM niveau 4.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Bovino, dans son cas ce ne serait pas plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d.removeChild(d.lastChild);

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut


    Bon, promis, je mettrai pas "Lire attentivement les questions du forum avant de répondre des âneries" comme compétence sur mon profil...

    Et puis, pour faire la fine bouche (et casser la compatibilité IE < 9) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d.removeChild(d.lastElementChild);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 34
    Par défaut
    Merci de vous investir autant

    J'ai opté pour la solution Selected.parentNode.removeChild(Alternate)... d'une part car 6 étoiles rouges ça impressionne mais également parce cela me permet de contourner les deux question subsidiaires :

    • Si j'utilise un prototype dont le nom est nouvellement utilisé par javascript (ex du remove() ajouté par les spécifications DOM4 comme indiqué par Bovino), que se passe t'il ?
    • Si je définit le outerHTML d'un élément par "" (chaine vide, donc), celui-ci n'est il pas automatiquement supprimé de la structure du document puisqu'il n'a plus ni forme ni contenu ?

    Ce dernier point me parait assez intéressant à creuser

  9. #9
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par LaDentDeLait Voir le message
    J'ai aussi découvert que la méthode existerait déjà sur certains navigateurs, que ce passe t-il si je créé un prototype portant le même nom ? il supprimer l'implémentation de base ?
    Tu as mis le doigt sur un problème qui s'appelle la collision de noms. C'est un des problèmes qu'on peut rencontrer quand on modifie un prototype du DOM. Si tu lis l'anglais, cet article est une excellente lecture.

    • Si j'utilise un prototype dont le nom est nouvellement utilisé par javascript (ex du remove() ajouté par les spécifications DOM4 comme indiqué par Bovino), que se passe t'il ?
    Tu ne sais pas ce qui peut se passer car ça dépend du navigateur. Au mieux, tu écrases la propriété et tu perds le comportement par défaut ; au pire ça fait une erreur silencieuse et ça se comporte de façon imprévisible.

    • Si je définit le outerHTML d'un élément par "" (chaine vide, donc), celui-ci n'est il pas automatiquement supprimé de la structure du document puisqu'il n'a plus ni forme ni contenu ?

    Ce dernier point me parait assez intéressant à creuser
    D'après le MDN, quand tu changes outerHTML avec la chaîne str, le nœud est remplacé par le résultat de l'interprétation de str. Le mot interprétation ici signifie que l'interpréteur HTML est appelé pour transformer la chaîne en un fragment d'arbre DOM. Si str est la chaîne vide, le nœud est remplacé par rien, et donc comme tu le penses, il est retiré du DOM.

    Par contre, ce n'est pas la solution la plus efficace car, comme avec sa cousine innerHTML, cette propriété fait appel à l'interpréteur HTML, il y a donc forcément une petite charge de travail en plus. Écrire noeud.parentNode.removeChild(noeud) est réellement le plus efficace, même si le code est plus long.

    La nouvelle méthode remove fait, à mon avis, la même chose (à verifier) ; en tout cas, elle est certainement au moins aussi efficace.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  2. [vb.net][stack] supprimer un élément ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/08/2005, 09h30
  3. Supprimé des éléments vide d'un tableau
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2005, 19h40
  4. Supprimer un élément d'une TObjectList
    Par Lung dans le forum Langage
    Réponses: 15
    Dernier message: 30/05/2005, 17h32
  5. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo