arrow_back

Sélection et Manipulation d'Éléments

Objectif : Apprendre à sélectionner et manipuler des éléments HTML en utilisant jQuery

04 Janvier 2024 · 10 minutes de lecture

Sommaire

  1. $(document).ready(function(){}) dans jQuery expand_more
  2. Sélection d'Éléments par leur balise expand_more
  3. Gestion des Clics sur des Divs Identiques avec jQuery expand_more

1. $(document).ready(function(){}) dans jQuery

La première chose à connaître est $(document).ready(function(){} dans jQuery. Cette structure est essentielle pour s'assurer que votre code JavaScript s'exécute uniquement une fois que la page HTML est complètement chargée, évitant ainsi des erreurs potentielles liées à la manipulation d'éléments HTML qui n'existent pas encore. Vous pouvez activer les options de développement de votre navigateur et constater que le texte : jQuery est prêt ! ne s'affiche qu'une fois la page entièrement chargée.

                
                    $(document).ready(function() {
                        console.log("jQuery est prêt !");
                    });
                
                

2. Sélection et Manipulation d'Éléments

  • Sélection d'Éléments par leur balise :
                
                    $("p").css("color", "red");
                
                
  • Sélection par classe
                
                    $(".ma-classe").hide();
                
                
  • Sélection par ID
                $("#mon-id").fadeIn();
                
  • Modifier les styles
                
                $(".ma-classe").css({"color": "white", "font-size": "20px"});
                $("#mon-id").css({"color": "blue", "font-size": "16px"});
                
                
  • Ajouter/Retirer des classes CSS
                
                // Ajouter une classe CSS
                $(".ma-classe").addClass("nouvelle-classe");

                // Retirer une classe CSS
                $("#mon-id").removeClass("ancienne-classe");

                // Alternativement, basculer une classe CSS (ajouter si elle est absente, sinon la retirer)
                $(".un-autre-element").toggleClass("classe-active");
                
                
  • Ajouter un élément au corps (body) ou à tout autre type de balise
                
                $("body").append("<p>Nouveau paragraphe</p>");
                
                
  • Changer le contenu d'un élément (texte, HTML)
                
                $("#mon-id").text("Nouveau texte");
                
                

3. Gestions des cliques simples

Ex 1 : La syntaxe de base pour attacher un gestionnaire de clic à un élément en utilisant jQuery est :

Cliquer sur le bouton

                        
                        <button class="btn btn-success" id="monBouton">Cliquez-moi</button>
                        $('#monBouton').click(function() {
                            // Basculer entre les classes "btn-danger" et "btn-success" sur le bouton
                            $('#monBouton').toggleClass("btn-danger btn-success");
                        });
                        
                        

Ex 2 : Changement de texte sur clic :

Cliquez sur ce paragraphe.

                        
                        <id="paragraphe">Cliquez sur ce paragraphe.</p>
                        $('#paragraphe').click(function() {
                            $(this).text("Le paragraphe a été cliqué !");
                        });
                        
                        

Ex 3 : Prévention du comportement par défaut :
Parfois, je voudrais empêcher le comportement par défaut d'un élément lors d'un clic, comme un lien qui redirige vers une autre page.

                                            
                        <a href="https://www.mahmoud-illourmane.fr" id="monLien">Visitez mon site</a>

                        $('#monLien').click(function(e) {
                            e.preventDefault(); // Empêche le lien de suivre l'URL
                            alert("Lien cliqué, mais nous restons ici !");
                        });
                        
                        

Ex 4 : Utilisation de on pour des éléments dynamiquement ajoutés :

                                            
                        <div id="conteneur">
                            <button class="btnClic">Bouton 1</button>
                        </div>
                        <button id="ajouterBouton">Ajouter un autre bouton</button>

                        // Gestion du clic pour les boutons existants et futurs
                        $('#conteneur').on('click', '.btnClic', function() {
                            alert("Un bouton à l'intérieur du conteneur a été cliqué !");
                        });

                        // Ajouter dynamiquement un nouveau bouton
                        $('#ajouterBouton').click(function() {
                            $('#conteneur').append('');
                        });
                        
                        

4. Gestion des Clics sur des Divs Identiques avec jQuery

Ex 1 : Dans cette section, nous allons explorer comment utiliser jQuery pour détecter les clics sur des div identiques contenant des champs input différents. Nous verrons comment identifier spécifiquement le div sur lequel un utilisateur a cliqué et à récupérer ou manipuler les données de l'input correspondant.

Cliquer sur un des deux inputs.

                        
                        <div class="conteneur-div">
                            <div class="div-enfant">
                                <input type="text" class="input-enfant" value="Input 1">
                            </div>
                            <div class="div-enfant">
                                <input type="text" class="input-enfant" value="Input 2">
                            </div>
                            <!-- Plus de divs identiques -->
                            <span class="input-result color_7"></span>
                        </div>
                            
                        // Cette fonction sera exécutée lorsqu'un div.div-enfant est cliqué
                        $(".conteneur-div").on("click", ".div-enfant", function() {
                            // $(this) fait référence au div.div-enfant sur lequel le clic a été effectué
                            var clickedDiv = $(this); 
                            // Trouver la valeur de l'input dans ce div spécifique
                            var inputValue = clickedDiv.find(".input-enfant").val(); 
                            $('.input-result').text(inputValue);
                            console.log("Div cliqué avec valeur d'input : " + inputValue);
                        });
                        
                        

Explications

.on("click", ".div-enfant", function() {...}) est utilisé pour la délégation d'événements. Cela signifie que même si vous ajoutez plus de div.div-enfant dynamiquement, le gestionnaire d'événements sera toujours appliqué. $(this) à l'intérieur de la fonction de rappel fait référence au div.div-enfant spécifique qui a été cliqué.
.find(".input-enfant") est utilisé pour sélectionner l'élément input enfant du div cliqué, et .val() pour obtenir sa valeur.

Ex 2 : Gestion des Boutons d'Édition et de Confirmation avec jQuery.
Dans cet exemple, nous avons un ensemble de champs de saisie associés à des boutons d'édition et de confirmation. L'objectif est de permettre à l'utilisateur de cliquer sur le bouton d'édition pour activer le champ de saisie correspondant, puis de cliquer sur le bouton de confirmation pour désactiver à nouveau le champ. Ce scénario est typique dans les interfaces de gestion de données où les modifications doivent être contrôlées et explicites.

                    
                        <div class="movie">
                            <div class="movie-name movie-info mb-3">
                                <div class="label">
                                    <label for="input-movie-name">Nom du film : <strong class="original-data" data-original="Tata">Tata</strong></label>
                                </div>
                                <div class="edit-data-movie">
                                    <div class="input-width">
                                        <input class="form-control input-edit-movie" type="text" name="movie_name" id="input-movie-name" value="Tata">
                                    </div>
                                    <div class="edit-data-button mt-2">
                                        <a class="edit-icon-button deco-none material-icons">edit</a>
                                        <a class="confirm-icon-button deco-none material-icons">check</a>
                                    </div>
                                </div>
                            </div>
    
                            <div class="movie-director movie-info mb-3">
                                <div class="label">
                                    <label for="label-movie-director">Réalisateur du film : <strong class="original-data" data-original="Toto">Toto</strong></label>
                                </div>
                                <div class="edit-data-movie">
                                    <div class="input-width">
                                        <input class="form-control input-edit-movie" type="text" name="director" id="input-movie-director" value="Toto">
                                    </div>
                                    <div class="edit-data-button mt-2">
                                        <a class="edit-icon-button deco-none material-icons">edit</a>
                                        <a class="confirm-icon-button deco-none material-icons">check</a>
                                    </div>
                                </div>
                            </div>
                            
                            <div class="movie-date-creation movie-info mb-3">
                                <div class="label">
                                    <label for="label-movie-year">Année de sortie : <strong class="original-data" data-original="2024">2024</strong></label>
                                </div>
                                <div class="edit-data-movie">
                                    <div class="input-width">
                                        <input class="form-control input-edit-movie" type="number" name="year_of_creation" id="input-movie-year" value="2024">
                                    </div>
                                    <div class="edit-data-button mt-2">
                                        <a class="edit-icon-button deco-none material-icons">edit</a>
                                        <a class="confirm-icon-button deco-none material-icons">check</a>
                                    </div>
                                </div>
                            </div>
                        </div>
                    
                
                        
                        // Au chargement de la page les champs sont désactivés 
                        $('.input-edit-movie').prop('disabled', true);
    
                        // Gestion du clic sur le bouton d'édition
                        $('.edit-icon-button').click(function() {
                            // Trouver le parent .movie-info du bouton d'édition cliqué
                            var movieInfo = $(this).closest('.movie-info');
                                    
                            // Activer le champ de saisie dans ce .movie-info
                            movieInfo.find('.input-edit-movie').prop('disabled', false);
                                
                            // Ici, vous pouvez également ajouter une logique pour modifier le label si nécessaire
                        });
    
                        // Désactivation du Champ de Saisie avec le Bouton de Confirmation
                        $('.confirm-icon-button').click(function() {
                            // Trouver le parent .movie-info du bouton de confirmation cliqué
                            var movieInfo = $(this).closest('.movie-info');
                    
                            // Désactiver le champ de saisie dans ce .movie-info
                            var inputField = movieInfo.find('.input-edit-movie');
                            inputField.prop('disabled', true);
                    
                            // Récupérer la valeur actuelle de l'input
                            var updatedValue = inputField.val();
                    
                            // Mettre à jour le texte du label correspondant
                            // Supposons que le label à mettre à jour est le  avec la classe .original-data
                            movieInfo.find('.original-data').text(updatedValue);
                        });
                        
                        
arrow_forward_ios Gestion des Données Dynamiques