jQuery и CSS - Удалить / Добавить отображение: нет


122

У меня есть div с этим классом:

.news{
  width:710px; 
  float:left;
  border-bottom:1px #000000 solid;
  font-weight:bold;
  display:none;
}

И я бы хотел, чтобы некоторые методы jQuery удалили этот display: none; (так будет отображаться div), а затем добавить его снова (так что div будет затенять).

Как мне это сделать? ура


3
jQuery $(".news").show()? "так что div будет тенью" ... вы имеете в виду, что он исчезнет ??
JCOC611

Да $(".news").show()работает! То же самое $(".news").hide()!!! Спасибо;)
markzzz

2
Вы можете конденсироваться , что вплоть до одного заявления с$('.news').toggle();
Эли Gundry

Ответы:


210

Чтобы скрыть div

$('.news').hide();

или

$('.news').css('display','none');

и показать div:

$('.news').show();

или

$('.news').css('display','block');

2
$ ( 'Новости ') CSS (' дисплей', 'блок'). у меня сработало! спасибо Шехал!
Jitesh Sojitra

Как мне сбросить стиль отображения на то, что было изначально задано в CSS, а не на «блокировку»?
ed22,

73

jQuery предоставляет вам:

$(".news").hide();
$(".news").show();

Затем вы можете легко показать и скрыть элемент (ы).


38
Проблема в том, что .show()он не удаляет display: none, а вместо этого помещает display: blockили в inlineзависимости от элемента, и это может нарушить макет, если элемент использует необычный displayстиль.
lolesque

@lolesque Я нашел простой способ исправить эту проблему. Просто используйте element{display:none;}в своем css, но одновременно используйте и element.hide()в js . Это позволит show()функции работать.
Джаррод

16

Итак, позвольте мне привести пример кода:

<div class="news">
Blah, blah, blah. I'm hidden.
</div>

<a class="trigger">Hide/Show News</a>

Ссылка будет триггером для отображения div при нажатии. Итак, ваш Javascript будет:

$('.trigger').click(function() {
   $('.news').toggle();
});

Почти всегда лучше позволить jQuery обрабатывать стили для скрытия и отображения элементов.

Изменить: я вижу, что люди выше рекомендуют использовать .showи .hideдля этого. .toggleпозволяет делать и то, и другое с одним эффектом. Так что это круто.


Хорошая идея показать toggleфункцию. Много раз, если вам нужно щелкнуть что-то и показать это, вы бы хотели, чтобы функция также скрывала это.
user3267755 05

16

В JavaScript:

getElementById("id").style.display = null;

В jQuery:

$("#id").css("display","");

Мне пришлось использовать $ ("# id"). Css ('display', ''); чтобы он работал должным образом при удалении встроенного стиля для «display»
TrippinBilly

1
Я тоже @TrippinBill (использующий Mac Firefox 43) - отправил правку. Кажется, это единственный способ удалить свойство CSS, а не отменить его. Это позволяет переопределить его более широкими назначениями CSS, тогда как реверсирование этого не делает.
Крис

11

Используйте переключатель, чтобы показать и скрыть.

$('#mydiv').toggle()

Проверьте рабочий пример на http://jsfiddle.net/jNqTa/


1
Обратите внимание, что .toggle()это устарело с jQuery 1.9.
TylerH

@TylerH Я не вижу заметку о том, что она устарела?
Пол

@Paul Извините, я думал о событии переключения api.jquery.com/toggle-event
TylerH

8

Я бы предложил добавить класс для отображения / скрытия элементов:

.hide { display:none; }

а затем используйте jquery .toggleClass (), чтобы показать / скрыть элемент:

$(".news").toggleClass("hide");

7

Единственный способ удалить встроенный "display: none" через css-api jQuery - сбросить его с помощью пустой строки (null кстати, НЕ работает !!).

Согласно документу jQuery, это общий способ «удалить» однажды установленное свойство встроенного стиля.

$("#mydiv").css("display","");

или

$("#mydiv").css({display:""});

должен работать правильно.

IMHO в jQuery отсутствует метод, который можно было бы назвать «показать» или «показать», который вместо того, чтобы просто установить другое свойство встроенного стиля, правильно сбрасывает отображаемое значение, как описано выше. Или, может быть, hide()следует сохранить начальное встроенное значение иshow() восстановить его ...



5

Вы не даете нам много информации, но в целом это может быть решением:

$("div.news").css("display", "block");

Какая еще информация вам нужна? Я думаю, это простой вопрос, не так ли? В любом случае, я решил, используя $(".news").show()и $(".news").hide();)
markzzz

Один животрепещущий вопрос: есть ли на странице еще div.news. В этом случае отобразятся все они.
Йориан

4

По какой-то причине у меня не работало переключение, и я получил сообщение об ошибке uncaught type error toggle is not a functionпри проверке элемента в браузере. Итак, я использовал следующий код, и он начал работать для меня.

$(".trigger").click(function () {
    $('.news').attr('style', 'display:none');
})

Используемый файл сценария jquery jquery-2.1.3.min.js.


3

Если у вас есть много элементов, которые вы хотели бы использовать .hide()или .show(), вы потратите много ресурсов, чтобы сделать то, что хотите, даже если вы используете .hide(0)или .show(0)- параметр 0 - это продолжительность анимации.

В отличие от Prototype.js .hide() и .show()методов, которые используются только для управления атрибутом отображения элемента, реализация jQuery более сложна и не рекомендуется для большого количества элементов.

В этом случае вам, вероятно, следует попытаться .css('display','none')скрыть и .css('display','')показать

.css('display','block') следует избегать, особенно если вы работаете со встроенными элементами, строками таблицы (фактически любыми элементами таблицы) и т. д.


1

Учитывая комментарий lolesque для лучшего ответа, вы можете добавить либо атрибут, либо класс для отображения / скрытия элементов со свойствами отображения, которые отличаются от того, что у него обычно есть, если вашему сайту требуется обратная совместимость, я бы предложил создать класс и добавить / удалить его, чтобы показать / отобразить элемент

.news-show {
display:inline-block;
}

.news-hide {
display:none;
}

Замените встроенный блок на предпочитаемый вами метод отображения и используйте jquerys addclass https://api.jquery.com/addclass/ и removeclass https://api.jquery.com/removeclass/ вместо show / hide, если в обратном направлении совместимость не проблема, вы можете использовать такие атрибуты.

.news[data-news-visible=show] {
display:inline-block;
}

.news[data-news-visible=hide] {
display:none;
}

И используйте jquerys attr () http://api.jquery.com/attr/, чтобы показать и скрыть элемент.

Какой бы метод вы ни предпочли, он позволяет легко реализовать анимацию css3 при отображении / скрытии элементов таким образом.


0

Использование show()добавок display:blockвместо display:hideних может привести к поломке.

Чтобы этого избежать, вы можете создать класс со свойством display:noneи переключать этот класс для этого элемента с помощью toggleClass().

$("button").on('click', function(event){  $("div").toggleClass("hide"); });
.hide{
   display:none;
}

div{
   width:40px;
   height:40px;
   background:#000;
   margin-bottom:20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>
<button>Toggle Box</button>

Ни в одном из ответов об этом не сказано.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.