Jak uczynić DIV widocznym i niewidocznym za pomocą JavaScript


113

Czy możesz zrobić coś takiego

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

1
Dlaczego po prostu nie użyć Jquery? .ukryć() ?
coderama

Czy użyłbym tego jako nazwy elementu div, więc jeśli element div miałby nazwę test, zrobiłbym to test.hide()?

8
@JackStone: Nie, to tylko wtedy, gdy używasz już biblioteki jQuery. Niektórzy po prostu lubią go promować w każdym pytaniu JavaScript. Nawet jeśli byłeś, .hide()nie ustawia widoczności. Ustawia wyświetlanie.

6
@am nie ja jestem Wyraźnie nie rozumiesz, że jQuery jest naprawdę świetny i robi wszystko. (Źródło obrazu)
Pekka

8
W przypadku czegoś takiego dobra odpowiedź powinna zawierać zarówno zwykłe rozwiązanie JS, jak i takie, które pokazuje zalety korzystania z biblioteki - w tym przypadku nie ma konieczności zajmowania się inline vs block podczas używania displaydo pokazania elementu.
ThiefMaster

Odpowiedzi:


139

jeśli [DIV] jest elementem to

[DIV].style.visibility='visible'

LUB

[DIV].style.visibility='hidden' 

16
visibilityma ten efekt uboczny, że miejsce zajmowane przez element pozostaje zarezerwowane. To może, ale nie musi, być tym, czego chce PO
Pekka,

1
W miejscu, w którym jest napisane [DIV], wpisałbym nazwę mojego div, prawda?

20
Nie, użyj document.getElementById('id-of-the-div')zamiast[DIV]
ThiefMaster

@JackStone: To zależy od tego, co masz na myśli przez „nazwę” swojego div. Jeśli jest to zmienna, która odwołuje się do elementu div, to tak.

1
Więc gdyby mój div był nazwany testdiv, to byłoby document.getElementById('testdiv').style.visibility = 'hidden';?

124

Załóżmy, że nie używasz biblioteki, takiej jak jQuery.

Jeśli nie masz jeszcze odniesienia do elementu DOM, zdobądź go za pomocą var elem = document.getElementById('id');

Następnie możesz ustawić dowolną właściwość CSS tego elementu. Aby pokazać / ukryć, możesz użyć dwóch właściwości: displayi visibility, które mają nieco inne efekty:

Dopasowanie style.displaybędzie wyglądać tak, jakby element w ogóle nie był obecny („usunięty”).

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)

lub style.visibilityfaktycznie sprawi, że element div nadal tam będzie, ale będzie „wszystkie puste” lub „wszystkie białe”

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

Jeśli korzystasz z jQuery, możesz to zrobić jeszcze łatwiej, o ile chcesz ustawić displaywłaściwość:

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

Automatycznie użyje odpowiedniej displaywartości; nie musisz przejmować się typem elementu (inline lub block). Dodatkowo, elemnie może być tylko elementem DOM ale również selektor takich jak #idlub .classczy cokolwiek innego, co jest ważne CSS3 (i więcej!).


Wolę twoją odpowiedź, ale myślę, że jest mała poprawka, którą musisz użyć elem.style.display = 'none';
Saumil


29

Możesz użyć visibilitylub, displayale musisz wprowadzić zmiany do div.styleobiektu, a nie do divsamego obiektu.

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 = falsenie działa u mnie w Chrome. A trueczęść wydaje się działać bardziej przypadkowo, ponieważ odblokowuje nieruchomość (chociaż nie mój negatywny głos)
Pekka,

Ani displaynie visibilitysą to właściwości logiczne. Poza tym nonei blocknależy je cytować, ponieważ są to ciągi znaków ...
ThiefMaster

nieprawidłowe wartości etykiet. Te działają teraz i nie, nie zamierzam się tym bawić, to zbyt uproszczone.
zellio

4

Możesz użyć funkcji DOM: setAttribute i removeAttribute. W poniższym linku masz przykład, jak ich używać.

Funkcje setAttribute i removeAttribute

Szybki podgląd:

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

2
Czy możesz wzmocnić swoją odpowiedź? Z przykładem i wyjaśnieniami.
Gaël Barbin

1

Możesz użyć tego, opacityco jest podobne do, visibility ale pozwala na płynne przejście i kontrolowanie innych parametrów, takich jak wysokość (dla uproszczenia fragmentu kodu umieszczam logikę js bezpośrednio w html - nie rób tego w kodzie produkcyjnym)


0

Użyj atrybutu „hidden” elementu DOM:

function showDiv(isVisible)
{
    [DIV].hidden = !isVisible;
}

0

Uczyń niewidzialnym za pomocą CSS

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

Uczyń widocznym za pomocą JavaScript

document.getElementById('div_id').style.visibility = 'visible';
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.