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

122

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

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

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

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

markzzz
источник
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();

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

JCOC611
источник
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","");
Sergio
источник
Мне пришлось использовать $ ("# 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");
rubiii
источник
7

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

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

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

или

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

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

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

shoesel
источник
6

Функции jQuery .show () и .hide (), вероятно, являются вашим лучшим выбором.

Дэйв Чайлд
источник
5

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

$("div.news").css("display", "block");
Yorian
источник
Какая еще информация вам нужна? Я думаю, это простой вопрос, не так ли? В любом случае, я решил, используя $(".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.

SRI
источник
3

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

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

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

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

nmirceac
источник
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>

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

Hackinet
источник