2017-06-27 1 views
1

J'utilise jQuery et l'interface utilisateur sémantique pour un projet, et je me suis retrouvé avec ce que le second this fait référence. À quoi la deuxième se référerait-elle? Je suis nouveau avec jQuery en passant. Je veux que la seconde se réfère à #sideBar un mais chaque fois que j'essaie d'ajouter des classes cela ne fonctionne pas,À quoi correspond le mot-clé dans ce contexte?

Je veux supprimer toutes les classes, puis ajouter un élément à toutes, puis obtenir le contenu du texte de la balise d'ancrage et définissez cet attribut de balise d'ancrage avec une classe avec le textContent tel que son nom.

$('#sideBar a').on('click', function(){ 
    $('#sideBar a').removeClass().addClass("item"); 
    var addC = ($(this).text()); 
    $(this).addClass(addC); 
}); 

Quelqu'un pourrait-il me dire comment faire cela, j'ai une certaine connaissance de demander l'appel et se lient en javascript par la façon dont

+5

Il se réfèrera à la même chose à laquelle le premier 'this' fait référence, l'élément' #sidebar a' sur lequel on a cliqué. – KyleS

Répondre

2

this intérieur et à l'écouteur d'événement avec une fonction non-flèche sera votre cible de l'événement :

$('#sideBar a').on('click', function (event) { 
    // next line removes all classes from all anchor elements that are children of #sideBar then adds the class item to each of them 
    $('#sideBar a').removeClass().addClass("item"); 
    // sets addC to whatever the event target's text is 
    var addC = ($(this).text()); 
    // adds the text stored in addC as a class to the event target 
    $(this).addClass(addC); 

    console.log(this === event.target); // logs true 

}); 

edit: Je viens de réaliser que je ne l'ai pas répondre à votre question:

$(this).parents('#sideBar').first().addClass(addC); au lieu de $(this).addClass(addC); devrait faire l'affaire.

+0

Ce code fonctionne, merci. Mais pourriez-vous m'expliquer la différence entre mon code non fonctionnel original et votre code et pourquoi le vôtre fonctionne et mon code n'a pas? –

+0

Vous souhaitez ajouter la classe à l'élément '# sideBar'. Dans le gestionnaire d'événements, 'event.target' est un enfant de' # sideBar', donc nous remontons l'arbre avec '.parents ('# sideBar')' et prenons le premier, puis nous y ajoutons la classe. – Brian