9
votes

En jQuery, essayant d'obtenir la classe suivante-item-pas-ayant-une classe spécifique

J'essaie d'obtenir au début non (.Check) Div après le .focus Div. Dans cet exemple, la mise au point est X2 et je devrais récupérer x5, sauter x3 et x4 car ils sont cachés.

<div id='CONTAINER'>
    <div id='X1'>eks1</div>
    <div id='X2' class='focus'>eks2</div>
    <div id='X3' class='hidden'>eks3</div>
    <div id='X4' class='hidden'>eks4</div>
    <div id='X5'>eks5</div>
    <div id='X6'>eks6</div>
</div>


0 commentaires

5 Réponses :


2
votes

Utilisez la méthode suivante: http://api.jquerery.com/next/ xxx < p> Cela trouvera la prochaine div après .Focus qui n'est pas .Chaussure


3 commentaires

Cela trouvera le prochain frère si correspond au sélecteur, pas la suivante sur que manche le sélecteur.


Quelle est la différence entre "si" et "ça"? En outre, "ça" n'est pas une opération logique dans JQuery. Quelle est la "cette" opération? TOBLYODIES, votre code ne trouvera pas le prochain, mais cessera plutôt de rechercher des divs lorsqu'il trouve un .Chadi DIV, qui ne renvoie aucun résultat dans l'exemple de OP.


Notez que lorsque j'ai commenté, cela a déclaré "Next", pas "Nextall", (et ceci est toujours ce qui est lié). Notez également le .Last (). Suivant () appelle dans mon (toujours incorrect dans le boîtier non caché) Réponse continuera après la dernière DIV non cachée. Vous êtes correct, "que" n'est pas une opération logique de JQuery, j'écris commodément en anglais, dans laquelle il s'agit d'un mot parfaitement valide utilisé pour souligner que le prochain () ne continuera pas à regarder après un frère de frère, quel que soit le sélecteur donné.



0
votes
$nextNotHidden = $('.focus').nextUntil(':not(.hidden)').last().next()

1 commentaires

Voulez-vous expliquer pourquoi cela fonctionne et s'il y a une différence pour les autres réponses?



23
votes

La déclaration ci-dessous doit résoudre votre problème. $ ("# conteneur"). Trouver ("div.focus"). Nextall ("div"). non ("caché"). Premier ();


2 commentaires

OK, j'ai fini de tester et cette réponse est confirmée pour trouver le premier noeud non caché, y compris lorsqu'il n'y a pas de nœuds non cachés. Merci encore et désolé d'avoir accepté prématurément une réponse incorrecte.


PS - En fin de compte, nous avons marqué les lignes «Pas. -Chentification» avec un attribut «non-Identif» afin qu'ils puissent être identifiés sans utiliser l'opérateur «non», ce qui est assez lent sur des collections plus importantes.



1
votes

Essayez-le!

$("#CONTAINER").find("div.focus").next('div[class!="hidden"]')


3 commentaires

Wow, grâce à tous ceux qui ont répondu. J'ai choisi celui-ci parce que c'était le premier qui a également géré le cas où aucune division cachée n'était présente.


Je pensais que c'était, mais maintenant je rencontre des problèmes. Vérifiez toujours si mon test est contaminé. Je pense que cela ne fonctionnera pas car "suivant" ne vérifie qu'un nœud, il ne change pas en avant jusqu'à ce qu'un nœud ne soit trouvé.


Mes excuses, celle-ci ne manipula que le cas où il n'y avait pas de nœuds cachés, j'ai donc dû choisir une réponse différente.



0
votes

Essayez ceci:

var stop = true;
$('#CONTAINER> div.focus +div').each(function(){
    if(!$(this).hasClass('hidden') && stop) code
    else stop = false;
});


0 commentaires