วิธีทำให้ DIV มองเห็นและมองไม่เห็นด้วย JavaScript


113

คุณสามารถทำสิ่งที่ชอบ

function showDiv()
{
    [DIV].visible = true;
    //or something
}

1
ทำไมไม่ใช้ Jquery? . ซ่อน ()?
coderama

ฉันจะใช้ชื่อนี้เป็นชื่อ div หรือไม่ดังนั้นถ้า div ตั้งชื่อ test ฉันจะทำtest.hide()อย่างไร

8
@JackStone: ไม่นั่นก็ต่อเมื่อคุณใช้ไลบรารี jQuery อยู่แล้ว บางคนก็ชอบที่จะโปรโมตคำถามเกี่ยวกับ JavaScript ทุกคำถาม แม้ว่าคุณจะเป็นคุณ.hide()อย่าตั้งค่าการเปิดเผย มันตั้งค่าการแสดงผล


8
สำหรับบางสิ่งเช่นนี้คำตอบที่ดีควรมีทั้งโซลูชัน JS ธรรมดาและคำตอบที่แสดงข้อดีของการใช้ไลบรารี - ในกรณีนี้ไม่ต้องจัดการกับอินไลน์เทียบกับบล็อกเมื่อใช้displayเพื่อแสดงองค์ประกอบ
ThiefMaster

คำตอบ:


139

ถ้า [DIV] เป็นองค์ประกอบแล้ว

[DIV].style.visibility='visible'

หรือ

[DIV].style.visibility='hidden' 

16
visibilityมีผลข้างเคียงว่าพื้นที่ที่ครอบครองโดยองค์ประกอบยังคงสงวนไว้ นั่นอาจเป็นสิ่งที่ OP ต้องการหรือไม่ก็ได้
Pekka

1
ตรงจุดที่เขียนว่า [DIV] ฉันจะพิมพ์ชื่อ div ของฉันใช่ไหม

20
ไม่ใช้document.getElementById('id-of-the-div')แทน[DIV]
ThiefMaster

@JackStone: ขึ้นอยู่กับความหมายของ "ชื่อ" ของ div ของคุณ ถ้าเป็นตัวแปรที่อ้างถึง div แสดงว่าใช่

1
แล้วถ้า div ของฉันเป็นชื่อtestdivมันจะเป็นdocument.getElementById('testdiv').style.visibility = 'hidden';อย่างไร?

124

สมมติว่าคุณไม่ได้ใช้ไลบรารีเช่น jQuery

หากคุณยังไม่มีการอ้างอิงถึงองค์ประกอบ DOM ให้รับหนึ่งโดยใช้ var elem = document.getElementById('id');

จากนั้นคุณสามารถตั้งค่าคุณสมบัติ CSS ขององค์ประกอบนั้น ในการแสดง / ซ่อนคุณสามารถใช้คุณสมบัติสองอย่าง: displayและvisibilityซึ่งมีลักษณะพิเศษที่แตกต่างกันเล็กน้อย:

การปรับstyle.displayจะดูเหมือนว่าไม่มีองค์ประกอบอยู่เลย ("ลบออก")

elem.style.display = 'none'; // hide
elem.style.display = 'block'; // show - use this for block elements (div, p)
elem.style.display = 'inline'; // show - use this for inline elements (span, a)

หรือstyle.visibilityจะทำให้ div ยังคงอยู่ที่นั่น แต่เป็น "all empty" หรือ "all white"

elem.style.visibility = 'hidden'; // hide, but lets the element keep its size
elem.style.visibility = 'visible';

หากคุณใช้ jQuery คุณสามารถทำได้ง่ายขึ้นตราบเท่าที่คุณต้องการตั้งค่าdisplayคุณสมบัติ:

$(elem).hide();
$(elem).show();

มันจะใช้displayค่าที่เหมาะสมโดยอัตโนมัติ คุณไม่ต้องสนใจประเภทองค์ประกอบ (แบบอินไลน์หรือบล็อก) นอกจากนี้elemไม่เพียง แต่สามารถเป็นองค์ประกอบ DOM แต่ยังเป็นตัวเลือกเช่น#idหรือ.classหรือสิ่งอื่น ๆ ที่เป็น CSS3 ที่ถูกต้อง (และอื่น ๆ !)


ฉันชอบคำตอบของคุณ แต่ฉันเดาว่ามีการแก้ไขเล็กน้อยที่คุณต้องใช้ elem.style.display = 'none';
Saumil

บางครั้งก็เป็นที่ยอมรับในการกำหนดสตริงที่ว่างเปล่าที่จะแสดงองค์ประกอบ
Basilevs

29

คุณสามารถใช้visibilityหรือdisplayแต่คุณต้องใช้การเปลี่ยนแปลงกับdiv.styleวัตถุไม่ใช่divวัตถุนั้นเอง

var div = document.getElementById('div_id');

// hide
div.style.visibility = 'hidden';
// OR
div.style.display = 'none';

// show
div.style.visibility = 'visible';
// OR
div.style.display = 'block';

div.style.visibility = falseไม่ทำงานสำหรับฉันใน Chrome และtrueดูเหมือนว่าส่วนนี้จะทำงานมากขึ้นโดยไม่ได้ตั้งใจเนื่องจากไม่ได้ตั้งค่าคุณสมบัติ (ไม่ใช่การลงคะแนนของฉัน)
Pekka

ทั้งdisplayมิได้visibilityเป็นทรัพย์สินบูล นอกจากนั้นnoneและblockจำเป็นต้องยกมาเนื่องจากเป็นสตริง ..
ThiefMaster

ค่าป้ายกำกับไม่ถูกต้อง งานเหล่านั้นตอนนี้และไม่ฉันจะไม่ทำเรื่องนี้มันง่ายเกินไป
zellio

5

คุณสามารถใช้ฟังก์ชัน DOM: setAttribute และ removeAttribute ในลิงค์ต่อไปนี้คุณมีตัวอย่างวิธีการใช้งาน

setAttribute และฟังก์ชัน removeAttribute

มุมมองอย่างรวดเร็ว:

hide:    document.getElementById("myDiv").setAttribute("hidden","");
unhide:  document.getElementById("myDiv").removeAttribute("hidden");

2
คุณสามารถเพิ่มคำตอบของคุณได้หรือไม่? พร้อมตัวอย่างและคำอธิบาย
Gaël Barbin

1

คุณสามารถใช้opacityสิ่งที่คล้ายกับvisibility แต่อนุญาตให้เปลี่ยนได้อย่างราบรื่นและควบคุมพารามิเตอร์อื่น ๆ เช่นความสูง (สำหรับความเรียบง่ายของตัวอย่างฉันใส่ js logic ใน html โดยตรง - อย่าทำในรหัสการผลิต)



0

ทำให้มองไม่เห็นโดยใช้ CSS

#div_id {
        /*height: 400px;*/
         visibility:hidden;
    }

ทำให้มองเห็นได้โดยใช้ Javascript

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