jQuery & CSS - Hapus / Tambahkan display: tidak ada

122

Saya memiliki div dengan kelas ini:

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

Dan saya ingin dengan beberapa metode jQuery menghapus display itu: none; (sehingga div akan ditampilkan) dan kemudian menambahkannya lagi (sehingga div akan membayangi).

Bagaimana saya bisa melakukannya? Bersulang

markzzz
sumber
3
jQuery $(".news").show()? "jadi div akan membayangi" ... maksudmu itu akan menghilang ??
JCOC611
Ya $(".news").show()bekerja! Sama $(".news").hide()!!! Terima kasih;)
markzzz
2
Anda dapat menyingkatnya menjadi satu pernyataan dengan$('.news').toggle();
Eli Gundry

Jawaban:

209

Untuk menyembunyikan div

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

atau

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

dan untuk menunjukkan div:

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

atau

$('.news').css('display','block');
Snehal Ghumade
sumber
2
$ ('. news'). css ('display', 'block'); berhasil untuk saya! terima kasih Shehal!
Jitesh Sojitra
Bagaimana cara mengatur ulang gaya 'tampilan' ke apa pun yang telah diatur di CSS sejak awal dan bukan untuk 'memblokir'?
ed22
73

jQuery memberi Anda:

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

Anda kemudian dapat dengan mudah menampilkan dan menyembunyikan elemen.

JCOC611
sumber
38
Masalahnya adalah, .show()tidak atau menghapus display: none, melainkan meletakkan display: blockatau inlinebergantung pada elemen, dan itu bisa merusak tata letak jika elemen menggunakan displaygaya yang tidak biasa .
lolesque
@lolesque Saya menemukan 'retasan' sederhana untuk memperbaiki masalah itu. Cukup gunakan element{display:none;}di css Anda, tetapi di js Anda, gunakan juga element.hide()di waktu yang sama. Ini akan memungkinkan show()fungsi untuk bekerja.
Jarrod
16

Jadi, izinkan saya memberi Anda kode sampel:

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

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

Tautan akan menjadi pemicu untuk menampilkan div saat diklik. Jadi Javascript Anda akan menjadi:

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

Anda hampir selalu lebih baik membiarkan jQuery menangani gaya untuk menyembunyikan dan menampilkan elemen.

Sunting: Saya melihat orang-orang di atas merekomendasikan penggunaan .showdan .hideuntuk ini. .togglememungkinkan Anda melakukan keduanya hanya dengan satu efek. Jadi itu keren.

Eli Gundry
sumber
Ide bagus untuk menunjukkan togglefungsinya. Sering kali jika Anda perlu mengklik sesuatu dan menampilkannya, Anda ingin fungsionalitasnya juga menyembunyikannya.
pengguna3267755
16

Dalam JavaScript:

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

Di jQuery:

$("#id").css("display","");
Sergio
sumber
Saya harus menggunakan $ ("# id"). Css ('display', ''); untuk membuatnya berfungsi dengan baik dalam menghapus gaya sebaris untuk "tampilan"
TrippinBilly
1
Saya juga @TrippinBill (menggunakan Mac Firefox 43) - telah mengirimkan hasil edit. Ini tampaknya menjadi satu-satunya cara untuk menghapus properti CSS daripada membalikkannya. Ini memungkinkannya untuk diganti dengan tugas CSS yang lebih luas, sedangkan membalikkannya tidak.
Chris
11

Gunakan sakelar untuk menampilkan dan menyembunyikan.

$('#mydiv').toggle()

Lihat contoh yang berfungsi di http://jsfiddle.net/jNqTa/

Hussein
sumber
1
Perhatikan bahwa .toggle()itu tidak digunakan lagi sejak jQuery 1.9.
TylerH
@TylerH Saya tidak bisa melihat catatan untuk melihatnya sudah usang?
Paul
@Paul Maaf, saya sedang memikirkan acara beralih api.jquery.com/toggle-event
TylerH
8

saya sarankan menambahkan kelas untuk menampilkan / menyembunyikan elemen:

.hide { display:none; }

dan kemudian gunakan jquery's .toggleClass () untuk menampilkan / menyembunyikan elemen:

$(".news").toggleClass("hide");
rubiii
sumber
7

Satu-satunya cara untuk menghapus inline "display: none" melalui css-api jQuery adalah dengan menyetel ulang dengan string kosong ( nullTIDAK berfungsi btw !!).

Menurut dokumen jQuery ini adalah cara umum untuk "menghapus" satu set properti gaya sebaris.

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

atau

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

harus melakukan trik dengan benar.

IMHO ada metode yang hilang di jQuery yang bisa disebut "unhide" atau "mengungkapkan" yang alih-alih hanya mengatur properti gaya inline lain membatalkan nilai tampilan dengan benar seperti dijelaskan di atas. Atau mungkin hide()harus menyimpan nilai inline awal dan show()harus mengembalikan ...

shoesel
sumber
6

Fungsi .show () dan .hide () jQuery mungkin adalah pilihan terbaik Anda.

Dave Child
sumber
5

Anda tidak memberi kami banyak informasi tetapi secara umum ini mungkin solusi:

$("div.news").css("display", "block");
Yorian
sumber
Info lain apa yang Anda butuhkan? Saya pikir itu pertanyaan sederhana, bukan? Bagaimanapun, saya menyelesaikannya dengan menggunakan $(".news").show()dan $(".news").hide();)
markzzz
Satu pertanyaan penting adalah: apakah ada lebih banyak div.news di halaman ini. Dalam hal ini ini akan menampilkan semuanya.
Yorian
4

Untuk beberapa alasan, toggle tidak berfungsi untuk saya, dan saya menerima kesalahan uncaught type error toggle is not a functionsaat memeriksa elemen di browser. Jadi saya menggunakan kode berikut dan itu mulai bekerja untuk saya.

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

File script jquery bekas jquery-2.1.3.min.js.

SRI
sumber
3

Jika Anda memiliki banyak elemen yang Anda ingin .hide()atau .show(), Anda akan membuang banyak sumber daya untuk melakukan apa yang Anda inginkan - bahkan jika menggunakan .hide(0)atau .show(0)- parameter 0 adalah durasi animasi.

Berbeda dengan Prototype.js .hide() dan .show()metode yang hanya digunakan untuk memanipulasi atribut tampilan elemen, implementasi jQuery lebih kompleks dan tidak disarankan untuk sejumlah besar elemen.

Dalam kasus ini Anda mungkin harus mencoba .css('display','none')untuk menyembunyikan dan .css('display','')menunjukkan

.css('display','block') harus dihindari, terutama jika Anda bekerja dengan elemen sebaris, baris tabel (sebenarnya elemen tabel apa pun), dll.

nmirceac.dll
sumber
1

Mempertimbangkan komentar lolesque untuk jawaban terbaik, Anda dapat menambahkan atribut atau kelas untuk menampilkan / menyembunyikan elemen dengan properti tampilan yang berbeda dari biasanya, jika situs Anda memerlukan kompatibilitas mundur, saya sarankan membuat kelas dan menambahkan / menghapusnya untuk ditampilkan / tampilkan elemennya

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

.news-hide {
display:none;
}

Ganti blok-sebaris dengan metode tampilan pilihan Anda dan gunakan jquerys addclass https://api.jquery.com/addclass/ dan hapus kelas https://api.jquery.com/removeclass/ daripada tampilkan / sembunyikan, jika mundur kompatibilitas tidak masalah, Anda dapat menggunakan atribut seperti ini.

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

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

Dan gunakan jquerys attr () http://api.jquery.com/attr/ untuk menampilkan dan menyembunyikan elemen.

Metode apa pun yang Anda sukai membuat Anda dapat dengan mudah mengimplementasikan animasi css3 saat menampilkan / menyembunyikan elemen dengan cara ini

Anders M.
sumber
0

Menggunakan show()penambahan display:blocksebagai penggantidisplay:hide yang mungkin merusak barang.

Untuk menghindarinya, Anda bisa memiliki kelas dengan properti display:nonedan mengalihkan kelas itu untuk elemen itu dengan 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>

Tidak ada jawaban yang menyebutkan ini.

Hackinet
sumber