jQuery show () สำหรับ Twitter Bootstrap คลาส css ที่ซ่อนอยู่


89

ฉันใช้ Twitter Bootstrap และฉันสังเกตเห็นว่า jQuery show()หรือfadeIn()ไม่ทำให้องค์ประกอบ DOM ที่มีเครื่องหมายคลาสhiddenปรากฏขึ้นเนื่องจากฟังก์ชั่น jQuery ลบdisplay: noneข้อกำหนดเท่านั้น อย่างไรก็ตามยังคงมีการตั้งค่าให้visibilityhidden

ฉันสงสัยว่าวิธีใดเป็นวิธีที่ดีที่สุดในการแก้ไขปัญหานี้

  1. ลบhiddenคลาสในองค์ประกอบ
  2. เปลี่ยนคุณสมบัติการมองเห็น
  3. เขียนทับคลาสที่ซ่อนอยู่ใน css ของฉันเอง

โดยเฉพาะอย่างยิ่งฉันต้องการทราบว่าการแก้ไขปัญหานี้ด้วย jQuery หรือ css นั้นดีกว่าหรือไม่และทำไม


โดยทั่วไปฉันไม่ใช้ {visibility: hidden} เนื่องจากทำให้องค์ประกอบใน DOM กินพื้นที่ มีเหตุผลบางอย่างที่คุณต้องทำหรือไม่?
isherwood

1
@isherwood visibility: hiddenมาจาก bootstrap ตอบสนอง
Lim H.

คำตอบ:


124

.collapseซีเอสเอชั้นที่คุณกำลังมองหาอยู่ สิ่งนี้ตั้งค่าองค์ประกอบเป็นdisplay: none;

ดังนั้นการใช้$('#myelement').show()จะทำงานได้อย่างถูกต้อง

UPDATE: Bootstrap v3.3.6 ได้อัปเดต. ยุบกลับไปที่:

.collapse {
  display: none;
}

2
นี่ควรเป็นคำตอบที่ได้รับการยอมรับ นอกจากนี้ยังทำงานร่วมกับ.slideDown(), .fadeIn()ฯลฯ.hiddenใน Bootstrap เป็นสิ่งที่คุณไม่ต้องการที่จะแสดง
ขี้อาย

มันใหม่ใน bootstrap 3 หรือไม่?
Lim H.

ไม่ - ฉันเคยเห็นมันใช้ในเอกสาร <div class = "nav-collision collision"> บรรทัดนี้นำมาจากตัวอย่าง v2.3.2
Eoinii

33
น่าเสียดายที่คำตอบนี้ใช้กับ Boostrap 3 ไม่ได้อีกต่อไป.collapseแล้วในขณะนี้visibility: hidden;
Tom17

9
ทำงานใน Bootstrap 3 ของฉันหรือไม่
James McCormack

21

สิ่งนี้จะทำให้องค์ประกอบที่มองไม่เห็นของคุณจางลงและลบชั้นเรียนออก

$('#element.hidden').css('visibility','visible').hide().fadeIn().removeClass('hidden');

http://jsfiddle.net/7qxVL/

หากคุณไม่ต้องการให้องค์ประกอบมองไม่เห็นจริงๆ (เช่นใช้พื้นที่ว่าง) คุณอาจต้องการกำหนดใหม่. ซ่อน (ใน css ในเครื่องของคุณอย่าเปลี่ยนแหล่งที่มาของ bootstrap หรือดีกว่าในไฟล์ LESS ในเครื่องของคุณ)


ขอบคุณมากสำหรับฉัน! ฉันทำให้ง่ายขึ้นเพียงแค่ทำ :: fadeIn (). removeClass ('hidden') - ไม่จำเป็นต้องจัดการ css โดยตรงหรือซ่อน
dbrin

1
ดูคำตอบที่โพสต์โดย @IrishJoker คุณไม่ควรใช้.hiddenสำหรับองค์ประกอบที่คุณต้องการแสดงโดยใช้จาวาสคริปต์ ใช้.collapseแทน
ขี้อาย

14

คำเตือน:

bootstrap 3.3.0 เพิ่งเปลี่ยน. ยุบเป็น:

.collapse {
  display: none;
  visibility: hidden;
}

ซึ่งเป็นการเปลี่ยนแปลงที่รุนแรงสำหรับ jQuery.show () ฉันต้องเปลี่ยนกลับไปเป็น inlining:

<div class="alert alert-danger" style="display:none;" >
</div>      

เพื่อใช้ jQuery ต่อไปดังนี้:

$('.alert').html("Change a few things up and try submitting again.").show()

คลาสเดียวที่ฉันพบใน bootstrap 3.3.0 เพื่อใช้เพียงแค่ 'display: none' คือ

.navbar {
  display: none;
}

1
ฉันไม่เห็นเหตุผลที่ดีที่ Bootstrap จะทำเช่นนี้ โดยส่วนตัวแล้วฉันมักจะมีไฟล์ css อื่นซึ่งใช้สำหรับการตั้งค่า css 'overriding' - ฉันจะแทนที่. ยุบเพื่อให้มีการตั้งค่าการแสดงผล วิธีนี้จะทำให้คุณก้าวไปข้างหน้าได้โดยไม่ต้องกังวลว่าทุกอย่างจะพัง เจ็บปวดในข้อความ :(
Eoinii

วิธีแก้ปัญหาใน Bootstrap 3.3.x คือการใช้.collapse('hide')และ.collapse('show')แทนวิธีการของ jQuery คุณสามารถตั้งค่าการมองเห็นเริ่มต้นได้โดยตรงใน HTML ผ่านทางคลาสcollapse(เพื่อซ่อน) หรือcollapse in(เพื่อแสดง) ดูgetbootstrap.com/javascript/#collapse
alexw

เวอร์ชันล่าสุด 3.3.6 ได้
ยกเลิก

5

ผมมีปัญหาเดียวกัน. ฉันใช้โปรแกรมแก้ไขนี้:

$(function() {
  $('.hidden').hide().removeClass('hidden');
});

จากนั้นฉันก็มีปัญหาอีกครั้งเนื่องจากแอปพลิเคชันของฉันสร้างองค์ประกอบใหม่และต่อท้าย / ต่อท้าย สิ่งที่ฉันทำในที่สุดคือหลังจากสร้างองค์ประกอบใหม่ที่ฉันทำ:

var newEl = ...;
$(newEl).find('.hidden').hide().removeClass('hidden');

4

สำหรับฉันมันเป็นเพราะ bootstrap ใช้!importantแฮ็คสำหรับทั้งคลาสซ่อนและซ่อน

ดังนั้นคุณจึงไม่สามารถใช้show()วิธีอื่น ๆ ที่มาพร้อมกับ jquery แต่คุณต้องเขียนทับรหัสที่น่ากลัวยิ่งกว่านั้นโดยเขียนทับรหัสแฮ็กกี้

$('#myelement').attr('style', 'display: block !important');

! important เป็นทางเลือกสุดท้ายและไม่ควรใช้ในไลบรารีหลักเช่น bootstrap


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.