Сложный вопрос селектора CSS, не знаю, возможно ли это вообще.
Допустим, это макет HTML:
<div></div>
<div></div>
<div></div>
<div style="display:none"></div>
<div style="display:none"></div>
Я хочу выбрать последний div
, который отображается (т.е. нет display:none
), который будет третьим div
в данном примере. Имейте в виду, количество div
s на реальной странице может отличаться (даже display:none
те).
html
css
css-selectors
Вишал Шах
источник
источник
Реальный ответ на этот вопрос, вы не можете сделать это. Альтернативы только для CSS-ответов не являются правильными ответами на этот вопрос, но если JS-решения приемлемы для вас, вам следует выбрать один из ответов JS или jQuery здесь. Однако, как я уже говорил выше, верный и правильный ответ заключается в том, что вы не можете сделать это в CSS надежно, если вы не готовы принять
:not
оператор с[style*=display:none]
и другими подобными отрицательными селекторами, который работает только на встроенных стилях и в целом плохо решение.источник
:not
оператора, как вы заявили, может работать при определенных обстоятельствах. Например, это отлично работает для моей ситуации, когда у меня есть условно скрывающие элементы JS, которые затем добавляют встроенные стили, и, таким образом, ваше решение действительно работает отлично :)Если вы можете использовать встроенные стили, то вы можете сделать это исключительно с помощью CSS.
Я использую это для выполнения CSS на следующем элементе, когда предыдущий виден:
источник
[style*='display: block']
так как мог быdisplay: block !important;
или просто<div style="display: block">
:-).btn-group > .btn.d-none + .btn
(используется для входных групп начальной загрузки "Я думаю, что невозможно выбрать по значению CSS (дисплей)
редактировать:
на мой взгляд, здесь есть смысл использовать немного jquery:
источник
Чистое решение JS (например, когда вы не используете jQuery или другую инфраструктуру для других вещей и не хотите загружать это только для этой задачи):
http://jsfiddle.net/uEeaA/90/
источник
Пытаться
div: not ([style * = "display: none"])
источник
иначе вы можете сделать это с помощью javascript, в Jquery вы можете использовать что-то вроде:
* переиздавались
источник
Это невозможно с помощью CSS, однако вы можете сделать это с помощью jQuery.
JSFIDDLE DEMO
JQuery:
HTML:
CSS:
JQuery (предыдущее решение):
источник
$('li:visible:last').addClass('red')
.$('li').not(':hidden').last().addClass("red");
Если вам больше не нужны скрытые элементы, просто используйте
element.remove()
вместоelement.style.display = 'none';
.источник
Это сработало для меня.
источник