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

jQuery Discussion :

Comprendre le comportement du mot clé this dans un plugin


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Comprendre le comportement du mot clé this dans un plugin
    Bonjour a tous,

    Pour pouvoir commencer a ecrire mes propres jQuery plugins, j'ai decide de lire le ch.11 du livre 'Learning Jquery 1.3' (p.346).

    Mais je ne semble pas pouvoir comprendre exactement comment le keyword this marche avec jQuery.fn dans l'exemple suivant:

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <style>
    .this{color:red}
    .that{color:blue;}
    .target{font-weight:bold}
     
    </style>

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <div id="test">blabli</div>
    <ul>
    <li class="that">Lorem ipsum dolor sit amet</li>
    <li>Consectetur adipisicing elit</li>
    <li>Sed do eiusmod tempor incididunt ut labore</li>
    <li>Magna aliqua</li>
    <li class="that">Ut enim ad minim veniam</li>
    <li>Quis nostrud exercitation ullamco</li>
    <li>Laboris nisi ut aliquip ex ea commodo</li>
    <li class="that">Duis aute irure dolor</li>
    </ul>
    <input type="button" value="Swap classes" id="swap" />

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $(document).ready(function() {
        $('#swap').click(function() { 
            $('li').swapClass('this', 'that');
            return false;
        });
    });
     
    jQuery.fn.swapClass = function(class1, class2) {
    	if (this.hasClass(class1)) {
    		this.removeClass(class1).addClass(class2);
    	}
    	else if (this.hasClass(class2)) {
    		this.removeClass(class2).addClass(class1);
    	}
    };

    Je ne comprends par exemple pas pourquoi si un des 'li' a une classe 'class1' alors tous les elements de la liste recoivent une class2 apres le click, si il n'y a aucun element avec la class1, mais des elements avec la classe2, alors tous les 'li' recoivent une class1 (apres la click)...Bref je ne comprends pas comment le keyword this marche dans cet exemple.

    Toutes suggestions/aides/explications bienvenues.
    Merci.

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 937
    Points
    22 937
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Voici un exemple, avec notes et conseils dans les commentaires du code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<style>
    		body { background-color:#dcdcdc; color:#000000; font-family:sans-serif; font-size:medium; font-style:normal; font-weight:normal; line-height:normal; letter-spacing:normal; }
    		h1,h2,h3,h4,h5 { font-family:serif; }
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img { margin:0px; padding:0px; }
            img {border:none; }
    		h1 { font-size:2em; text-shadow: 4px 4px 4px #bbbbbb; text-align:center; }
    		p { padding:6px; }
            ul,ol,dl {list-style:none; padding-left:6px; padding-top:6px; }
            li {padding-bottom:6px; }
    		.conteneur { width:95%; min-width:800px; min-height:400px; margin:12px auto; background-color:#FFFFFF; color:#000000; border:1px solid #666666; }
     
    		/* TEST */
     
    		/* Conseil : n'utilisez jamais des mots clés ou utilisés couramment en JavaScript comme non de classe */
     
    		.ceci {color:red}
    		.cela {color:blue;}
    		.cible {font-weight:bold}
        </style>
    </head>
    <body>
    	<h1>Forum jQuery</h1>
    	<section class="conteneur">
     
    		<div id="test">blabli</div>
     
    		<ul>
    			<li class="ceci">Lorem ipsum dolor sit amet</li>
    			<li>Consectetur adipisicing elit</li>
    			<li>Sed do eiusmod tempor incididunt ut labore</li>
    			<li>Magna aliqua</li>
    			<li class="cela">Ut enim ad minim veniam</li>
    			<li>Quis nostrud exercitation ullamco</li>
    			<li>Laboris nisi ut aliquip ex ea commodo</li>
    			<li class="cela">Duis aute irure dolor</li>
    		</ul>
     
    		<!-- Conseil : placer dans l'ordre après le tag : l'id éventuel, la classe éventuelle, et le reste -->
    		<input id="swap" type="button" value="Swap classes" />
     
    	</section>
    	<script charset="utf-8" src="http://code.jquery.com/jquery-1.5.2.min.js"></script>
    	<script>
    		$(function(){
    			jQuery.fn.swapClass = function(class1, class2){
    				/*
    				 * Ici (jQuery.fn) this est un tableau (array) d'objet jQuery.
    				 * On doit toujours retourner l'objet jQuery.
    				 * i : le numéro de l'élément de 0 à n.
    				 * item : l'élément du DOM.
    				 * $(item) : l'objet jQuery qui encapsule l'item.
    				 */
    				return this.each(function(i, item){
    					if ($(item).hasClass(class1)) {
    						$(item).removeClass(class1).addClass(class2);
    					} else if ($(item).hasClass(class2)) {
    						$(item).removeClass(class2).addClass(class1);
    					}
    				});
    			};
     
    			$('#swap').click(function() { 
    				$('li').swapClass('ceci', 'cela');
     
    				return false;
    			});
    		});
    	</script>
    </body>  
    </html>

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Comprendre le comportement du mot clé this dans un plugin
    Merci beaucoup pour votre reponse Daniel.
    Je comprends maintenant ce qu'il se passait dans mon script Jquery: dans la premiere boucle, il regarde simplement si un des objects slectionnes (tous les 'li' des la liste) a une class1 (hasClass() s'applique a tous), et dans ce cas il applique la classe 2 pour tous (this represente tous les 'li' de la liste 'd'un coup') et n'entre dans le else de la boucle seulement si aucun des 'li' a une class1.
    Merci bien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comprendre le comportement d’un Itérateur dans une liste
    Par achraf.b.a dans le forum Débuter
    Réponses: 9
    Dernier message: 16/01/2015, 15h52
  2. prob affichage mot en gras dans un texte
    Par klik dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/07/2005, 09h38
  3. apache su mot de passe dans un fichier
    Par jean-jacques varvenne dans le forum Apache
    Réponses: 4
    Dernier message: 31/01/2005, 21h07
  4. sécuriser le mot de passe dans une page asp
    Par Redouane dans le forum ASP
    Réponses: 2
    Dernier message: 10/03/2004, 22h16

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