Une question de sélection CSS délicate, je ne sais pas si c'est même possible.
Disons que c'est la mise en page HTML:
<div></div>
<div></div>
<div></div>
<div style="display:none"></div>
<div style="display:none"></div>
Je veux sélectionner le dernier div
, qui est affiché (c'est-à-dire non display:none
) qui serait le troisième div
dans l'exemple donné. Remarquez que le nombre de div
s sur la page réelle peut différer (même display:none
ceux).
html
css
css-selectors
Vishal Shah
la source
la source
La vraie réponse à cette question est que vous ne pouvez pas le faire. Les alternatives aux réponses CSS uniquement ne sont pas des réponses correctes à cette question, mais si les solutions JS vous conviennent, vous devez choisir l'une des réponses JS ou jQuery ici. Cependant, comme je l'ai dit ci-dessus, la vraie et bonne réponse est que vous ne pouvez pas le faire de manière fiable en CSS à moins que vous ne soyez prêt à accepter l'
:not
opérateur avec[style*=display:none]
et d'autres sélecteurs inversés, qui ne fonctionnent que sur les styles en ligne, et sont globalement médiocres. Solution.la source
:not
opérateur comme vous l'avez indiqué peut fonctionner dans certaines circonstances. Par exemple, cela fonctionne parfaitement pour ma situation où j'ai JS cachant conditionnellement des éléments qui ajoutent ensuite des styles en ligne et donc votre solution fonctionne parfaitement :)Si vous pouvez utiliser des styles en ligne, vous pouvez le faire uniquement avec CSS.
J'utilise ceci pour faire du CSS sur l'élément suivant lorsque le précédent est visible:
la source
[style*='display: block']
car il aurait pudisplay: block !important;
ou tout simplement<div style="display: block">
:-).btn-group > .btn.d-none + .btn
(utilisé pour les groupes d'entrée de bootstrap "Je pense qu'il n'est pas possible de sélectionner par une valeur css (affichage)
Éditer:
à mon avis, il serait logique d'utiliser un peu de jquery ici:
la source
Solution Pure JS (par exemple, lorsque vous n'utilisez pas jQuery ou un autre framework pour d'autres choses et que vous ne voulez pas le télécharger uniquement pour cette tâche):
http://jsfiddle.net/uEeaA/90/
la source
Essayer
div: not ([style * = "display: none"])
la source
d'une autre manière, vous pouvez le faire avec javascript, dans Jquery, vous pouvez utiliser quelque chose comme:
* réédité
la source
Ce n'est pas possible avec CSS, mais vous pouvez le faire avec jQuery.
DÉMO JSFIDDLE
jQuery:
HTML:
CSS:
jQuery (solution précédente):
la source
$('li:visible:last').addClass('red')
.$('li').not(':hidden').last().addClass("red");
Si vous n'avez plus besoin des éléments masqués, utilisez simplement à la
element.remove()
place deelement.style.display = 'none';
.la source
Cela a fonctionné pour moi.
la source