web-dev-qa-db-fra.com

Fonction jQuery .each () avec les fonctions fléchées ES6

J'ai ce code ES6, après l'avoir compilé avec Babel en ES5, le rappel de this à l'intérieur de .each Devient undefined. Comment résoudre ce problème?

let mediaBoxes = $(".now-thumbnail");
let titles = [];
mediaBoxes.each(() => {
      let obj = {
              index: i,
              title: $(this).find(".now-thumbnail-bottomtext").text().trim()
           };
  titles.Push(obj);
});
26
Tekeste Kidanu

Ma solution est de ne pas utiliser du tout this, mais d'utiliser les variables transmises à la fonction de rappel. Le premier est l'index et le second vous donne l'élément DOM lui-même.

 let mediaBoxes = $(".now-thumbnail");
 let titles = [];
 mediaBoxes.each((index, element) => {
                let obj = {
                    index: index,
                    title: $(element).find(".now-thumbnail-bottomtext").text().trim()
                };
                titles.Push(obj);
 });
38
Tekeste Kidanu

En effet, la moyenne de this n'est pas la même dans les fonctions fléchées.

ce

Les fonctions fléchées capturent cette valeur du contexte englobant,

La fonction each () transmet l'élément comme deuxième argument au rappel.

Mais une solution plus appropriée pour vous sera également d'utiliser . Map () au lieu de each ()

let mediaBoxes = $(".now-thumbnail");
let titles = mediaBoxes.map((i, el) => {
  return {
    index: i,
    title: $(el).find(".now-thumbnail-bottomtext").text().trim()
  };
}).get();
26
Arun P Johny