jQuery addClass() à l'élément généré après append()
Je suis en train d'ajouter une classe nouvellement ajouté DIV sans l'aide de quelque chose comme:
t.y.append('<div class="lol'+i+'"></div>');
Voici un exemple de ce que je suis en train de faire:
var t = this;
$(this.x).each(function(i, obj) {
//append new div and add class too <div></div>
t.y.append('<div></div>').addClass('lol'+i);
});
De chargement de la Page HTML ressemble à:
<div class=".slideButton0 .slideButton1 .slideButton2" id="sliderNav">
<div></div>
<div></div>
<div></div>
</div>
- Le meilleur exemple n'est, en effet, une meilleure apparence. Quel est le problème que vous rencontrez?
Vous devez vous connecter pour publier un commentaire.
Lorsque vous ajoutez un élément à travers
.append
, il ne change pas le contexte de l'objet jQuery.Vous pouvez l'écrire comme ceci:
$('<div></div>').appendTo(t.y).addClass('lol'+i);
ou
$('<div></div>').addClass('lol'+i).appendTo(t.y);
(ces deux font la même chose, simplement dans des ordres différents, le deuxième peut être plus clair)
le contexte de l'objet jQuery sera le nouvellement créé div.
appendTo
est définitivement la solution la plus élégante pour des OP de cas.Mark Reed
,Gromer
solution. Ce qui est plus efficace et pourquoi?appendTo
effectivement se retourne et appelleappend
, mais je doute qu'il n'y a aucune différence significative en termes d'efficacité. Donc, je dirais qu'il revient à qui de code vous préférez lire.addClass
tout d'abord, juste pour être plus clair sur ce qui se passe:$('<div/>').addClass('lol'+i).appendTo(t.y)
.append
, il va générer le nouveau balisage (si nécessaire), et l'ajouter à la contexte actuel, mais le contexte reste le même, doncaddClass
sera appliquée à ce contexte, au lieu de la nouvellement créée div.devrait être
Dans le premier cas, vous êtes ajout de la classe à la division à laquelle vous ajoutez ..
De SORTE que le contexte est toujours le div parent et pas le nouvellement ajouté div..
Vous avez besoin de trouver d'abord à l'intérieur de la mère, puis ajouter la classe..
MODIFIER
Si vous voulez juste ajouter la classe pour le dernier élément ajouté à ... Trouver le dernier div dans le parent, puis ajouter la classe à elle..
Ce sera assurez-vous de ne pas ajouter à la classe de tous les div à chaque fois que vous effectuez une itération dans la boucle..
t.y
ne pas avoir d'autresdivs
en elle'lol'+1
. Par exemple:<div class='lol1 lol2 lol3'></div>
Essayez ceci:
t.y.append($('<div></div>').addClass('lol'+i));
Violon: http://jsfiddle.net/gromer/QkTdq/
.append($('<div>', { 'class': 'lol'+i }));
Shmiddty
solution. Ce qui est plus efficace et pourquoi?Le problème est que
append
retourne le contenant plutôt que la chose que vous avez juste ajouté à la fin. Je voudrais juste faire leaddClass
avant laappend
au lieu d'après:MODIFIER ... ou, en d'autres termes, exactement ce que Gromer dit. Me battre par les cinq minutes entières, trop. Je suis lent.
Shmiddty
solution. Ce qui est plus efficace et pourquoi?Vous ne mentionnez pas pourquoi vous voulez le numéro de la
class
attribut de la liste de vos éléments, mais dans le cas que vous êtes réellement en utilisant le css n'oubliez pas que vous avez :impair et :même sélecteur css attritbutes et aussi l'équivalent pair/impair sélecteurs jQuery.http://www.w3.org/Style/Examples/007/evenodd.en.html
http://api.jquery.com/odd-selector/