201 votes

Un sélecteur CSS pour obtenir la dernière div visible

Une question délicate sur les sélecteurs CSS, je ne sais même pas si c'est possible.

Disons qu'il s'agit de 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 pas display:none ) qui serait le troisième div dans l'exemple donné. Attention, le nombre de div sur la page réelle peuvent différer (même les display:none ).

0 votes

One of the problems with this request is that, as a general principle, CSS can select an element only based on previous elements (ancestors or previous siblings), and not on anything that comes afterwards. Ainsi, votre <div> ne peut pas être sélectionné sur la base des propriétés des <div>s qui viennent après lui.

82voto

Surreal Dreams Points 12016

Vous pouvez sélectionner et styliser ces éléments avec JavaScript ou jQuery, mais les feuilles de style en cascade (CSS) ne suffisent pas.

Par exemple, si vous avez jQuery mis en œuvre sur le site, vous pourriez simplement le faire :

var last_visible_element = $('div:visible:last');

Avec un peu de chance, vous aurez une classe/ID enveloppée autour des divs que vous sélectionnez, auquel cas votre code ressemblerait à ceci :

var last_visible_element = $('#some-wrapper div:visible:last');

30 votes

La question ne dit clairement pas "un sélecteur CSS JQuery", mais "un sélecteur CSS", ce qui devrait être la REPONSE acceptée =P

2 votes

C'est, en effet, la réponse à la question initiale. L'auteur de la question n'a jamais mentionné javascript ou jquery et ces balises ont été ajoutées par un autre répondant. 1nfected - voulez-vous vraiment jQuery ? Si oui, veuillez le mentionner dans votre question. Sinon, vous devriez accepter cette réponse à la place.

0 votes

Je pense que jQuery est acceptable pour le PO. C'était la solution acceptée, après tout.

40voto

madeinstefano Points 1193

Il existe une solution purement css (CSS3) si votre div est caché en utilisant l'attribut "style".

div:not([style*="display: none"]):last-child{ /* bla */}

Notez l'espace entre "display :" et "none", si vous ne pouvez pas dire exactement s'il y a un espace dans l'attribut ou non, vous pouvez faire le sélecteur comme ceci :

div:not([style*="display:none"]):not([style*="display: none"]):last-child{ /* bla */}

jQuery est roi, mais les solutions CSS3 sont des dieux

9voto

Guillaume86 Points 7812

Je pense qu'il n'est pas possible de sélectionner par une valeur css (affichage).

éditer :

à mon avis, il serait judicieux d'utiliser un peu de jquery ici :

$('#your_container > div:visible:last').addClass('last-visible-div');

3voto

martynas Points 3494

Ce n'est pas possible avec CSS, mais vous pourriez le faire avec jQuery.

DEMO DE JSFIDDLE

jQuery :

$('li').not(':hidden').last().addClass("red");

HTML :

<ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li class="hideme">Item 4</li>    
</ul>

CSS :

.hideme {
    display:none;
}

.red {
    color: red;
}

jQuery (solution précédente) :

var $items = $($("li").get().reverse());

$items.each(function() {

    if ($(this).css("display") != "none") {
        $(this).addClass("red");
        return false;
    }

});

3 votes

C'est beaucoup de jQuery pour $('li:visible:last').addClass('red') .

0 votes

Hein ? $('li').not(':hidden').last().addClass("red");

1voto

eveevans Points 2137

D'une autre manière, vous pouvez le faire avec javascript , en Jquery vous pouvez utiliser quelque chose comme :

$('div:visible').last()

*réédité

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X