jQuery & CSS - Видалити / Додати дисплей: немає


122

У мене є діва з цим класом:

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

І я хотів би, щоб деякими методами jQuery видалити цей дисплей: жоден; (так показать div) і, ніж додати його ще раз (так div буде затінювати).

Як я можу це зробити? Ура


3
jQuery $(".news").show()? "значить, дів затінить" ... ти маєш на увазі, що він зникне ??
JCOC611

Так $(".news").show()працює! Те саме $(".news").hide()!!! Спасибі;)
markzzz

2
Ви можете звести це до одного твердження з$('.news').toggle();
Елі Гундрі

Відповіді:


208

Щоб приховати div

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

або

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

і показати div:

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

або

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

2
$ ('. news'). css ('дисплей', 'блок'); працював на мене! дякую Шехал!
Jitesh Sojitra

Як змінити стиль "display" на те, що було встановлено в CSS в першу чергу, а не на "block"?
ed22

73

jQuery надає вам:

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

Потім ви можете легко показати та приховати елементи.


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

@lolesque Я знайшов простий "хак", щоб вирішити цю проблему. Просто використовуйте element{display:none;}у своєму css, але у js, також використовуйте element.hide()одночасно. Це дозволить show()функції працювати.
Jarrod

16

Отже, дозвольте надати вам зразок коду:

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

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

Посилання стане тригером для показу діва при натисканні на нього. Тож ваш Javascript буде:

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

Вам майже завжди краще дозволити jQuery обробляти стилі для приховування та показу елементів.

Редагувати: я бачу, що люди вище рекомендують використовувати .showі .hideдля цього. .toggleдозволяє зробити обидва лише одним ефектом. Так це круто.


Гарна ідея показати toggleфункцію. Багато разів, якщо вам потрібно щось натиснути і показати, ви хочете, щоб функціональність приховувала його також.
користувач3267755

16

У JavaScript:

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

У jQuery:

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

Мені довелося використовувати $ ("# id"). Css ('display', ''); щоб зробити це належним чином у видаленні стилю вбудованого для "відображення"
TrippinBilly

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

11

Використовуйте перемикач, щоб показати та приховати.

$('#mydiv').toggle()

Перевірте приклад роботи на веб-сайті http://jsfiddle.net/jNqTa/


1
Зауважте, що .toggle()застаріле з часу jQuery 1.9.
TylerH

@TylerH Не можу побачити нотатку, щоб побачити її застарілу?
Павло

@Paul Вибачте, я думав про тугу
TylerH

8

Я б запропонував додати клас для відображення / приховування елементів:

.hide { display:none; }

а потім скористайтеся .toggleClass () jquery для показу / приховування елемента:

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

7

Єдиний спосіб видалити вбудований "display: none" через css-api jQuery - це скинути його із порожнього рядка (null НЕ працює btw !!).

Згідно з документом jQuery, це загальний спосіб "видалити" колись задане властивість стилю inline.

$("#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

Враховуючи коментар лолески для найкращої відповіді, ви можете додати або атрибут, або клас, щоб показати / приховати елементи із властивостями відображення, які відрізняються від звичайних, якщо ваш сайт потребує зворотної сумісності, я б запропонував скласти клас та додати / видалити його, щоб показати / відображення елемента

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

.news-hide {
display:none;
}

Замініть вбудований блок на обраний вами бажаний метод відображення та використовуйте jquerys addclass https://api.jquery.com/addclass/ та deleteclass https://api.jquery.com/removeclass/ замість показ / приховування, якщо назад сумісність - це не проблема, ви можете використовувати такі атрибути.

.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.